我刚从弗林德的采访中听到这个消息。他被问到动态创建对象与创建对象的区别和点是什么。
示例:
Obj *test = new test();
VS
Obj test;
有什么区别,动态创建对象与创建对象有什么关系?我知道一个区别可能是动态创建的变量在堆上,而另一个在堆栈上,但更多,更大的差异?
答案 0 :(得分:4)
C ++没有堆和堆栈的概念。相反,这两种不同类型的分配是存储持续时间:
使用块本地声明创建对象时,它具有自动存储持续时间。当这个对象超出范围时,它将被销毁。
使用new
创建对象时,它具有动态存储持续时间。手动delete
时,这样的对象将被销毁。程序员,你负责确保对象被销毁。
您应该始终更喜欢使用自动存储持续时间。当您需要一个对象在不同范围之间保持活动时,您只需要动态存储持续时间。如果确实需要动态存储持续时间,则应该更喜欢使用智能指针(如std::unique_ptr
或std::shared_ptr
),它们可以为您管理动态分配对象的生命周期。这有助于避免内存泄漏。
答案 1 :(得分:0)
主要区别在于对象的生命周期:堆栈对象自动控制它,而对于堆对象,它是手动控制器。所有其他差异都是这一点的结果。