C++正在删除对象
C++ deleting an object
delete()
运算符是否也会破坏对象的所有子对象?还是在删除父对象之前需要调用子对象的删除?
class equipment
{
public:
int model_id;
...
}
class player
{
public:
int x, y;
equipment * Equipment;
player(void) { Equipment = new equipment[2];};
~player(void) { delete [] Equipment; }
};
int main (....)
{
player = new Player;
...
...
delete Player;
}
您需要删除主对象的析构函数中动态分配的子对象,并且您已经通过删除数组Equipment
Delete运算符确实按照您的说法删除了所有"子对象",但通常情况下,您不仅需要删除"子对象",还需要删除成员指针指向的内存。因此,例如,如果您使用矢量对象,它将被自动删除,但在这种情况下,您需要显式删除它,这是正确的
简单地说,在销毁对象期间:
- 成员对象本身已销毁
- 成员指针指向的对象不是
这意味着你必须手动删除它们(就像你的Equipement
指针一样),如果你拥有它们。可能会出现这样的情况:您的类最终带有一个不属于它的指针(例如,该类中需要的某个其他对象的句柄),因此不应该删除。
您可以使用智能指针(即:std::shared_ptr
、std::unique_ptr
等)以更安全的方式管理内存(特别是,它们会根据RAII原则自动删除所管理的指针)。
您缺少的一件事是类设备中的析构函数
您在示例中所做的工作就足够了
delete[] Equipment;
在玩家的析构函数中,所以一旦玩家被删除,所有包含的设备都会被删除。
干得好!
相关文章:
- 线程调用的函数对对象删除是否安全?
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 使用 com 对象删除计划任务
- C 将对象删除为参考
- C样式对象删除的包装器
- 静态映射中动态分配的对象.删除必要的
- C++指向对象删除的指针数组,"Debug assertion failure!"
- 在其成员函数返回之前,将对象删除是不确定的行为吗?
- Python 对象删除检测
- C++安全对象删除
- Qt:RemoveWidget和对象删除
- Qt对象删除导致崩溃
- 删除由两个shared_pointer实例管理的对象(删除其中一个)
- 顶点缓冲区对象(删除进程)opengl
- 设计 -- 按名称或对象删除
- 提升中的异常:进程间,共享内存对象删除
- 使用std::function和std::bind来存储回调并处理对象删除
- 如何使用智能指针防止双重对象删除
- 指针指向对象删除时自动为空
- 对象层次结构中的对象删除责任