Tho*_*ing 2 c++ inheritance destructor
假定一个类及其所有子类只需要默认的析构函数来释放它们的资源(如果存储在精确类型的变量中(或指向精确类型的指针)),如果由基类指针引用,则子类可以泄漏内存.然后被那个指针删除?
#include <memory>
class A {
};
class B : public A {
public:
B () : pInt(new int) {}
auto_ptr<int> pInt; // this is what might leak... possibly more will though
};
void will_this_leak () {
A *pA = new B();
delete pA;
}
Run Code Online (Sandbox Code Playgroud)
"泄漏记忆"?你为什么要特别谈论泄漏记忆?
您发布的代码会产生未定义的行为.在这种情况下可能发生任何事情:内存泄露,硬盘格式化,程序崩溃等.
PS我知道那里有一个流行的都市传奇,在没有虚拟析构函数的情况下执行多态破坏"可能会泄漏内存".我不知道是谁发明了那些废话以及为什么他们决定使用"泄漏记忆"作为可能发生的事情的主要场景.实际上,这种情况下的行为与"泄漏记忆"完全无关.行为简直是未定义的.
从实际的角度来看,在你的特定情况下很明显,没有真正的机会让你的析构函数auto_ptr被调用,所以它拥有的内存auto_ptr肯定会被泄露.但同样,这是代码中最少的问题.
| 归档时间: |
|
| 查看次数: |
718 次 |
| 最近记录: |