【发布时间】:2017-12-08 08:09:26
【问题描述】:
我对下面这段代码很困惑。
#include <iostream>
class mobject
{
public:
mobject(){ std::cout << "mobject ctor\n"; }
~mobject(){ std::cout << "mobject dtor\n"; }
};
mobject giveme() { return mobject(); }
void func2(const mobject& p) { mobject g = p; }
void func1(const mobject& p) { func2(p); }
int main()
{
func1(giveme());
return 0;
}
它给了我以下输出:
对象 ctor mobject dtor mobject dtor我使用 gcc 5.4.0 编译了代码,并带有“g++ -g temp.cpp”。我主要关心的是第二次调用 mobjects 的析构函数。这看起来是完全错误的,因为我们第二次调用 dtor。 valgrind 告诉我这个没有问题,但我仍然很困惑。
【问题讨论】:
-
您构造了 2 个对象,一个临时对象和一个命名本地对象
g。然后调用了两个析构函数。 -
你听说过复制构造函数吗,它有签名
mobject(const myobject&),你创建了一个复制对象,因此调用了2个析构函数。
标签: c++