中易网

C++中定义类的对象:用new和不用new有何区别?

答案:4  悬赏:10  
解决时间 2021-02-03 05:25
举个简单的例子:
class Point
{
private:
int x;
int y;
public:
void Set(int a,int b)
{ x=a; y=b; }
void Print()
{ cout<<"("<};

void main()
{
Point p1;
Point *p2=new Point();
p1.Set(1,2);
p2->Set(4,5);

p1.Print();
p2->Print();
delete p2;
}
对象p1,p2的定义方式有何本质不同?用哪种方式比较好?
最佳答案
p1有系统创建并释放,你不要担心会出现内存泄露,但是生命期只有在本区域的大括号内,出了大括号就没用了。P2是指针,要自己释放,用不好很危险,用好了功能强大,因为他可以赋值给全局的变量,一下子从局部变量变成全局变量,还能把对象作为函数返回值。
全部回答
有区别的。至于哪种方法好?这没有一个标准吧。取决于你使用的场合和个人取向。 区别:Point *p2=new Point(); 这是向堆空间申请一个sizeof(Point)大小的空间存放Point对象。(使用new 可以完成对象的构造,有的人喜欢使用malloc函数申请,显然是错误的) Point p1; 这是在栈空间申请Point大小的空间。 至于操作方面,你的程序已经写得很清楚了。
个人认为你这段代码习惯不太好。你的set函数实际是一个构造函数,(但是没有用构造函数名重载),带参数的,所以在没有初始化的情况下执行也能正确。但是最好对于一个新的变量,就用构造函数初始化(无论是自己定义的构造函数还是系统默认的)。在实际应用时,根据需要是用默认构造函数还是自己写的构造函数。
不用new,定义在栈上。出了作用域就会自动失效。但是栈的空间有限,默认只有1m。 使用new,定义在堆(自由存储区)上,容量大小只受物理内存限制,在delete之前不会失效。如果不需要这个对象,必须使用delete释放。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
贾坨子在哪里啊,我有事要去这个地方
已经去国税解除了非常户,为什么企业信用网还
慈利徐健摩托车超市地址有知道的么?有点事想
爱情公寓极品曾小贤1到248
双子女比射手男大几个月会影响爱情运势吗?这
谁有共生与置换的图形创意 最好有图片 不要书
前坂村办公楼地址在哪,我要去那里办事
锦绣斋地址有知道的么?有点事想过去
以事业为重的男人是一个什么样的人?
打动人生命的力量,包括哪些内容?
长7米高40公分宽30公分钢筋水泥梁能承受多少
红米手机老是出现缓存内存清理是怎么回事?
怎样写一句话会表示自己的不甘示弱?
常州市兆良塑料制品厂我想知道这个在什么地方
认识了一个新朋友,他让我跟他去湛江那边做外
推荐资讯
考不上高中怎么办 父母不想让我上职高
后台运行经常死机,到底是内存不足还是cpu的
喜洋商店地址在什么地方,想过去办事
求一部搜查官电影
井家窝堡我想知道这个在什么地方
I'd怎么解释?????
屋顶花园适和和什么菜
谁知道新乡华兰生物公司在长垣建的分血浆站的
上古卷轴5这种角色怎么创建出来的 我知道是用
刘家屯怎么去啊,有知道地址的么
微佳美容美体SPA生活馆在什么地方啊,我要过
洛克王国黑炎最好留那四个技能
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?