如何删除动态分配的参数

how to delete dynamically allocated parameter

本文关键字:动态分配 参数 删除 何删除      更新时间:2023-10-16

我正在制作一款游戏,在这一点上我很挣扎:

在。h文件中我有:

std::vector<int*> m_Vector; 

然后在。cpp文件中:

 m_Vector.push_back(new Object1(new Object2()));

我知道我可以这样删除Object1:

 delete m_Vector[0]

但是如何删除Object2?谢谢!

假设Object1有一个Object2 *obj2成员,并且这是在Object1的构造函数中设置的,您需要做以下操作:

delete m_Vector[0].obj2;
delete m_Vector[0];

然而,由于你使用的是c++,你可能应该使用析构函数。

另外,为什么要将Object1* s存储在std::vector<int*>中?

看起来您正在使用新的Object2()作为新的Object1构造函数的参数。如果是这种情况,则第二个对象根本不存储在vector中。其次,vector只保存int*类型的对象(或整型指针)。我不完全清楚为什么需要一个带有自定义构造函数的新类来向vector添加int*。我强烈建议您查看http://www.cplusplus.com/reference/vector/vector/以获取有关vector类的信息。

首先,应该存储指向Object1的指针,而不是指向int的指针。

另一方面,如果你使用智能指针,你可以摆脱释放分配内存的所有问题。

std::vector<std::shared_ptr<Object1>> m_Vector;

,然后创建如下对象:

m_Vector.push_back(std::make_shared<Object1>());

反过来,Object1也应该使用std::shared_ptr,等等

注意,如果您不需要共享对象,您应该使用std::unique_ptr