非虚拟平凡析构函数+继承

2024-04-07

假定一个类及其所有子类在存储在精确类型(或指向精确类型的指针)的变量中时只需要默认析构函数即可释放其资源,如果由基类指针引用并且子类可能会泄漏内存,并且然后被那个指针删除?

Example:

#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;
}

“内存泄漏”?为什么要专门谈论内存泄漏?

您发布的代码产生未定义的行为。在这种情况下,任何事情都可能发生:内存泄漏、硬盘格式化、程序崩溃等。

附:我知道有一个流行的都市传说,即在没有虚拟析构函数的情况下执行多态破坏“可能会泄漏内存”。我不知道是谁发明了这种废话,也不知道他们为什么决定使用“内存泄漏”作为可能发生的情况的主要场景。实际上,这种情况下的行为与“内存泄漏”完全无关。该行为根本就是未定义的。

从实际的角度来看,在您的特定情况下,很明显,您的析构函数没有真正的机会auto_ptr被调用,所以它拥有的内存auto_ptr肯定会被泄露。但同样,这是该代码中最不存在的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

非虚拟平凡析构函数+继承 的相关文章

随机推荐