我对两种不同的方式感到困惑,我发现它们在VS中都很好。你能让我知道差异的本质吗?
答案 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!
}