我有多年的编程经验,但我对C ++很陌生。我不完全理解以下几行将会做什么:
this -> obj = MyObject(param)
首先,我有以下假设:
这是对的吗?
第二:当创建它时,obj由默认构造函数创建。何时会调用此对象的析构函数?我认为,它恰好在被上面的行覆盖之前发生,但我的调试输出表明它会在被破坏时发生。
答案 0 :(得分:3)
你最后的假设是错误的。临时(您称之为本地)将在声明结束后立即销毁。
在this -> obj = MyObject(param);
行中,赋值运算符为obj
分配了新的对象(有效地覆盖了成员)。但覆盖并不意味着销毁(并且不会调用合理的赋值运算符函数析构函数)。当obj
(父)被销毁时,this
将被销毁(尽管如果它是通过调用delete
来指向某个东西的指针,则可以显式销毁它。)