Ted*_*gel 4 c++ memory-leaks memory-management c++11
我们知道,如果你打算多态地使用基类的析构函数,则需要将基类的析构函数指定为虚拟,否则你的程序可能会出现资源泄漏,因为只会调用基类析构函数而不是派生对象析构函数.
我们也知道构造函数/析构函数纯粹是初始化/取消初始化构造,operator new/operator delete 处理内存的分配/取消分配。
在那种情况下,在我的 C++ 类只包含原始数据成员的情况下,为什么缺少析构函数调用会导致泄漏?更准确地说,操作符 delete 不能取消分配内存,这就是造成资源泄漏的原因?
编辑:添加一个例子,以澄清我的问题。在以下情况下,派生的析构函数永远不会被调用。这是否意味着derivedInt 的内存永远不会被取消分配?在这种情况下,是因为无法调用析构函数,还是因为操作符 delete 无法为 int 取消分配内存?
class Base
{
int baseInt;
public:
Base(){};
~Base(){};
};
class Derived : public Base
{
int derivedInt;
public:
Derived(){};
~Derived(){};
};
int main(int argc, const char * argv[]) {
Base *pb = new Derived();
delete pb;
return 0;
}
Run Code Online (Sandbox Code Playgroud)