使用C++中使用"new"创建的指针进行内存管理

Memory management with pointers created using "new" in C++

本文关键字:指针 管理 内存 new C++ 使用 创建      更新时间:2023-10-16

我有一个基类,在头文件中声明了2个指针。然后在基类的方法中使用"new"关键字初始化指针,并在基类的析构函数中使用"delete"删除指针。

我还有一个继承自基类的派生类。这里我也声明了一个指针。根据布尔值的不同,该指针被赋值给基类的任意一个指针。但是,当调用基类的析构函数时,这会导致段错误。

我的理解是,发生这种情况是因为派生类将在调用基类的析构函数之前自动删除指针。当在基类中调用"delete"时,该内存区域已经被释放,并导致段错误。

正确的做法是什么?我的目标是在派生类中有一个指针,它可以灵活地等于基类中初始化的指针之一。

要么不删除派生类中的指针,要么使用标准智能指针std::shared_ptr

您的基类可能应该有一个虚析构函数,那么您应该在派生类中重写析构函数,以确保所有内容都按照您期望的顺序删除。

但是不看代码很难知道发生了什么,所以这只是一个想法…