按值分配成员对象:我的假设是否正确?

时间:2014-06-11 11:02:02

标签: c++

我有多年的编程经验,但我对C ++很陌生。我不完全理解以下几行将会做什么:

this -> obj = MyObject(param)

首先,我有以下假设:

  • 调用MyObject(param)时,会在堆栈上创建对象的本地版本。
  • 此对象也会复制到此 - >物镜。
  • 当程序离开当前作用域(即行的方法)时,将调用该对象的本地版本的析构函数。

这是对的吗?

第二:当创建它时,obj由默认构造函数创建。何时会调用此对象的析构函数?我认为,它恰好在被上面的行覆盖之前发生,但我的调试输出表明它会在被破坏时发生。

1 个答案:

答案 0 :(得分:3)

  1. 你最后的假设是错误的。临时(您称之为本地)将在声明结束后立即销毁。

  2. this -> obj = MyObject(param);行中,赋值运算符obj分配了新的对象(有效地覆盖了成员)。但覆盖并不意味着销毁(并且不会调用合理的赋值运算符函数析构函数)。当obj(父)被销毁时,this将被销毁(尽管如果它是通过调用delete来指向某个东西的指针,则可以显式销毁它。)