导读 在C++编程中,如果你有一个基类指针指向派生类对象,并通过该指针调用`delete`释放内存时,如果基类的析构函数不是`virtual`,会发生什么呢...
在C++编程中,如果你有一个基类指针指向派生类对象,并通过该指针调用`delete`释放内存时,如果基类的析构函数不是`virtual`,会发生什么呢?答案是:资源泄漏和未定义行为!🔥
这是因为当基类的析构函数不是`virtual`时,编译器只会调用基类的析构函数,而不会调用派生类的析构函数。这会导致派生类对象中分配的资源(比如动态内存、文件句柄等)无法被正确释放,从而引发问题。
那么,如何避免呢?很简单,只需要将基类的析构函数声明为`virtual`即可!👇
```cpp
class Base {
public:
virtual ~Base() {}// 虚析构函数
};
```
这样,当使用基类指针删除派生类对象时,会先调用派生类的析构函数,再调用基类的析构函数,确保所有资源都被妥善释放。
记住,只要你的类可能被继承,就请务必为析构函数加上`virtual`关键字!✨