本文主要是介绍new一个类对象和使用类名创建一个对象有什么区别?该怎么解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
举个简单的例子:
class Domo
{
private: int x; int y;
public: void Set(int a,int b):x(a),y(b){}
void Print() { cout<<"("<<x<<","<<y<<")"<<endl; }
};
void main()
{
Demo p;
Demo *q=new Point();
p.Set(1,2);
q->Set(4,5);
p.Print();
q->Print();
delete q;
}
对象p1,p2的定义方式有何本质不同?用哪种方式比较好?
p1有系统创建并释放,你不要担心会出现内存泄露,但是生命期只有在本区域的大括号内,出了大括号就没用了。P2是指针,要自己释放,用不好很危险,用好了功能强大,因为他可以赋值给全局的变量,一下子从局部变量变成全局变量(自己从局部对象变为全局对象,成员变量也会变为全局成员变量),还能把对象作为函数返回值(返回对象指针)。
最佳答案
1.存储空间上不同。 new出来的在堆上 ,直接定义的在栈上
2.栈上分配的在函数结束后会自己释放,堆上的要自己手工释放。
要考虑实际情况
IF: 如果对象本身很小,或者没有特殊的必要,还是要放在栈上,这样有2个好处:
1 效率高
2 在堆上创建对象容易引起内存碎片
ELSE :
使用new在堆上分配,给程序员留下了很大的自由度,这可能是高手的代码中使用new比较多的原因
使用new需要更多的控制管理,由此带来了程序的高效和运行的更加健壮
c语言的精华就是指针运算管理,使用new是产生一个自由使用的指针对象的好办法
使用new的其它好处:
1、需要的时候才new(在复杂权限和业务逻辑系统中很重要)
2、对象可靠性检查(没有栈空间的限制问题)
3、对象的适度留用控制
这篇关于new一个类对象和使用类名创建一个对象有什么区别?该怎么解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!