【问题标题】:What's the difference between "A = Obj()" and "A = new Obj()" [duplicate]“A = Obj()”和“A = new Obj()”有什么区别 [重复]
【发布时间】:2014-04-12 09:17:44
【问题描述】:

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

【问题讨论】:

  • A 的类型是什么?
  • 第一个是函数,第二个是类构造函数
  • @mangusta 第一个绝对不是函数。
  • @juanchopanza 是的,如果 Obj 是类名。他没有具体说明
  • @juanchopanza 没有人在这里谈论函数声明。我的意思是函数调用,而不是声明

标签: c++ object new-operator


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-20
      • 2014-02-16
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      相关资源
      最近更新 更多