C++中定义类的对象:用new和不用new有何区别?
答案:4 悬赏:10
解决时间 2021-02-03 05:25
- 提问者网友:沉默的哀伤
- 2021-02-02 09:02
举个简单的例子:
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的定义方式有何本质不同?用哪种方式比较好?
最佳答案
- 二级知识专家网友:ー何必说爱
- 2021-02-02 10:20
p1有系统创建并释放,你不要担心会出现内存泄露,但是生命期只有在本区域的大括号内,出了大括号就没用了。P2是指针,要自己释放,用不好很危险,用好了功能强大,因为他可以赋值给全局的变量,一下子从局部变量变成全局变量,还能把对象作为函数返回值。
全部回答
- 1楼网友:桃花别处起长歌
- 2021-02-02 13:05
有区别的。至于哪种方法好?这没有一个标准吧。取决于你使用的场合和个人取向。
区别:Point *p2=new Point(); 这是向堆空间申请一个sizeof(Point)大小的空间存放Point对象。(使用new 可以完成对象的构造,有的人喜欢使用malloc函数申请,显然是错误的) Point p1; 这是在栈空间申请Point大小的空间。
至于操作方面,你的程序已经写得很清楚了。
- 2楼网友:花一样艳美的陌生人
- 2021-02-02 12:14
个人认为你这段代码习惯不太好。你的set函数实际是一个构造函数,(但是没有用构造函数名重载),带参数的,所以在没有初始化的情况下执行也能正确。但是最好对于一个新的变量,就用构造函数初始化(无论是自己定义的构造函数还是系统默认的)。在实际应用时,根据需要是用默认构造函数还是自己写的构造函数。
- 3楼网友:两不相欠
- 2021-02-02 11:37
不用new,定义在栈上。出了作用域就会自动失效。但是栈的空间有限,默认只有1m。
使用new,定义在堆(自由存储区)上,容量大小只受物理内存限制,在delete之前不会失效。如果不需要这个对象,必须使用delete释放。
我要举报
大家都在看
推荐资讯