"A = Obj()"和"A = new Obj()"有什么区别

What's the difference between "A = Obj()" and "A = new Obj()"

本文关键字:Obj 什么 区别 new      更新时间:2023-10-16

我对这两种不同的方式感到困惑,我发现它们在vs中都是可以的。你能告诉我区别的本质吗?

第一个创建一个默认构造的临时对象,并使用复制构造函数(如果赋值在A的声明中)或复制赋值操作符从临时对象复制到A。然后销毁临时对象。

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

在这种理解水平上,我能给你的最好建议是远离new。您稍后将需要它来完成更复杂的任务,但不要让事实(例如,Java也有new)欺骗了您。在c++中,new打开了一个在其他语言中不存在的问题的世界。有人可能会说,在不同的语言中,关键字是相同的,这很不幸……:)

更准确地说,c++中的new意味着,当你不再需要时,你创建的对象将不会自动从内存中删除。你必须通过指针来记住它在内存中的位置,而指针是一个很容易被滥用的危险工具,尤其是对于没有经验的程序员。
void f()
{
    Obj *a = new Obj();
    // no automatic destruction, the object remains in memory!
}