我们知道,如果你打算通过多态使用基类的析构函数,则需要将其指定为虚析构函数,否则你的程序可能会出现资源泄漏,因为只有基类的析构函数会被调用,而不是派生对象的析构函数。
我们还知道,构造函数/析构函数是纯粹的初始化/反初始化构造,而operator new/operator delete处理内存的分配/释放。
在这种情况下,如果我的C++类只包含原始数据成员,那么为什么缺少析构函数调用会引起泄漏呢? 更准确地说,是操作符delete无法释放内存造成资源泄漏吗?
编辑:添加一个示例,以阐明我的问题。在以下情况下,派生对象的析构函数永远不会被调用。这是否意味着derivedInt的内存永远不会被释放?在这种情况下,是因为无法调用析构函数还是因为操作符delete无法释放int的内存?
我们还知道,构造函数/析构函数是纯粹的初始化/反初始化构造,而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;
}