【发布时间】:2017-12-23 21:26:38
【问题描述】:
class A{
/.../
};
class B{
public:
A& foo()
{
A *bar = new A;
return *bar;
}
};
int main()
{
A varA;
B varB;
varA = varB.foo();
return 0;
}
当这行代码执行varA = varB.foo() 时会发生什么?是否会调用 foo 中创建的对象的析构函数(在复制/移动赋值运算符函数调用之后)?
【问题讨论】:
-
"执行此行会发生什么
varA = varB.foo()"内存泄漏 -
foo()返回对堆上对象的引用。varA是从该对象复制分配的,然后泄漏。 -
不,使用
new创建的对象的析构函数不会被调用。前往en.cppreference.com/w/cpp/language/new 并以此为起点,进一步了解该主题。
标签: c++ c++11 reference operator-overloading