如何删除动态分配的参数

时间:2014-07-29 20:35:15

标签: c++ object

我创造了一个游戏,而且我在这一点上一直在努力:

我在.h文件中的

std::vector<int*> m_Vector; 

然后在.cpp文件中:

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

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

 delete m_Vector[0]

但是如何删除Object2? 谢谢!

3 个答案:

答案 0 :(得分:0)

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

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

但是,由于您使用的是C ++,因此您应该使用destructors

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

首先,您应该存储指向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