C 多继承下多态内存释放问题
时间: 2023-08-25 17:04:03 浏览: 52
在 C++ 中,多继承下的多态内存释放问题可以通过虚析构函数来解决。当一个类被作为基类使用时,应该将析构函数声明为虚函数,这样在删除指向派生类对象的基类指针时,会调用正确的析构函数。
考虑以下示例代码:
```cpp
#include <iostream>
class Base {
public:
virtual ~Base() {
std::cout << "Base destructor" << std::endl;
}
};
class Derived1 : public Base {
public:
~Derived1() {
std::cout << "Derived1 destructor" << std::endl;
}
};
class Derived2 : public Base {
public:
~Derived2() {
std::cout << "Derived2 destructor" << std::endl;
}
};
int main() {
Base* ptr = new Derived1();
delete ptr;
ptr = new Derived2();
delete ptr;
return 0;
}
```
在上述代码中,`Base` 是一个基类,`Derived1` 和 `Derived2` 是派生类。我们通过基类指针 `ptr` 分别创建了 `Derived1` 和 `Derived2` 的对象,并使用 `delete` 运算符进行删除。
由于 `Base` 的析构函数声明为虚函数,在删除 `ptr` 时,会首先调用 `Derived1` 的析构函数,然后再调用 `Base` 的析构函数。同样,删除 `Derived2` 对象时也会按照同样的顺序进行析构。
这样做可以保证在多继承下的多态情况下,正确地释放对象的内存。