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

Assign member object by value: Is my hypothesis correct?

本文关键字:假设 是否 我的 分配 成员对象      更新时间:2023-10-16

我有几年的编程经验,但我对c++还是个新手。我不完全明白下面这行要做什么:

this -> obj = MyObject(param)

首先,我有以下假设发生了什么:

  • 当调用MyObject(param)时,在堆栈上创建对象的本地版本。
  • 这个对象也被复制到这个-> obj。
  • 当程序离开当前范围(即该行所在的方法)时,调用对象的本地版本的析构函数。

正确吗?

第二:当它被创建时,obj被默认构造函数创建。何时调用该对象的析构函数?我假设,它发生在上面的行覆盖之前,但是我的调试输出表明,它发生在它被销毁的时候。

  1. 你最后的假设是错误的。临时的(你称之为local的)将在语句结束后立即销毁。

  2. this -> obj = MyObject(param);行中,obj通过赋值运算符赋值给新的对象(有效地覆盖了成员)。但是覆盖并不意味着销毁(并且在相同的赋值操作符函数中,将不会调用析构函数)。obj将在this(父)被销毁时被销毁(尽管如果它是一个指针,你可以通过调用delete来显式地销毁它)。