对象点与动态创建的对象?

时间:2014-01-17 09:21:46

标签: c++ object pointers dynamic

我刚从弗林德的采访中听到这个消息。他被问到动态创建对象与创建对象的区别和点是什么。

示例:

Obj *test = new test();

VS

Obj test;

有什么区别,动态创建对象与创建对象有什么关系?我知道一个区别可能是动态创建的变量在堆上,而另一个在堆栈上,但更多,更大的差异?

2 个答案:

答案 0 :(得分:4)

C ++没有堆和堆栈的概念。相反,这两种不同类型的分配是存储持续时间

  • 使用块本地声明创建对象时,它具有自动存储持续时间。当这个对象超出范围时,它将被销毁。

  • 使用new创建对象时,它具有动态存储持续时间。手动delete时,这样的对象将被销毁。程序员,你负责确保对象被销毁。

您应该始终更喜欢使用自动存储持续时间。当您需要一个对象在不同范围之间保持活动时,您只需要动态存储持续时间。如果确实需要动态存储持续时间,则应该更喜欢使用智能指针(如std::unique_ptrstd::shared_ptr),它们可以为您管理动态分配对象的生命周期。这有助于避免内存泄漏。

答案 1 :(得分:0)

主要区别在于对象的生命周期:堆栈对象自动控制它,而对于堆对象,它是手动控制器。所有其他差异都是这一点的结果。