“A = Obj()”和“A =新Obj()”之间有什么区别?

时间:2014-03-09 09:09:26

标签: c++ object new-operator

我对两种不同的方式感到困惑,我发现它们在VS中都很好。你能让我知道差异的本质吗?

2 个答案:

答案 0 :(得分:1)

第一个创建一个默认构造的临时对象,并使用copy-constructor(如果赋值在A的声明中)或复制赋值运算符从临时对象复制到{ {1}}。然后,临时对象被销毁。

第二个在堆上创建一个默认构造的对象,并返回一个指向这个新对象的指针。您必须稍后A此对象,否则您将发生内存泄漏。

答案 1 :(得分:1)

在这种理解水平上,我能给你的最好建议就是远离new。对于更复杂的任务,稍后需要它,但是不要让Java例如new这样的事实愚弄你。在C ++中,new打开了其他语言中不存在的问题。有人可能会说不幸的是,关键字在不同的语言中是相同的......:)

更准确地说,C ++中的new意味着,除了别的以外,你创建了一个对象,当你不再需要它时,不会自动从内存中移除。你必须通过指针记住它在内存中的位置,并且指针是一种易于滥用的危险工具,特别是对于没有经验的程序员而言。

void f()
{
    Obj *a = new Obj();
    // no automatic destruction, the object remains in memory!
}