我有两个类,base_class 和 derived_class,并且有以下代码:
base_class *ptr = new derived_class;
delete ptr;
这段代码会导致内存泄漏吗?如果是,我该如何处理?
我有两个类,base_class 和 derived_class,并且有以下代码:
base_class *ptr = new derived_class;
delete ptr;
这段代码会导致内存泄漏吗?如果是,我该如何处理?
当你删除一个对象时,它不会泄漏内存块,其内存块将被释放。
如果你没有声明base_class
中的析构函数为虚函数,那么就会泄漏在derived_class
中包含的任何依赖于derived_class
的析构函数来释放它们的动态分配对象。这是因为如果析构函数不是虚函数,在这种情况下,derived_class
的析构函数不会被调用。这也意味着在derived_class
中的“嵌入对象”的析构函数将不会自动调用,这是另一个问题,可能导致进一步的泄漏和重要清理代码未被执行。
总之,在base_class
中声明析构函数为虚函数,就可以安全地使用所提出的技术。
有关编码示例,请参见:
base_class* ptr = new derived_class();
- Ciaranbase_class
没有虚析构函数,这将触发未定义行为(§5.3.5/p3)。 - Marco A.