如何删除动态分配的参数
how to delete dynamically allocated parameter
我正在制作一款游戏,在这一点上我很挣扎:
在。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
。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问动态分配列表中的元素
- 为什么 std::equal_to会导致动态分配?
- 调用析构函数以释放动态分配的内存
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 将数组动态分配到具有指针参数的函数中
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 如何使用一些参数初始化动态分配的数组中的对象
- 可以这么说,动态分配作为参数
- Qt中的2D游戏:初始化怪物并将动态分配的数组作为指针参数传递
- 如何删除动态分配的参数
- c++:在构造函数调用中作为参数创建的动态分配对象会发生什么?
- 如何使用参数化构造函数动态分配对象数组
- Qt信号:将动态分配参数的所有权传递给插槽
- 从动态分配的解引用指针默认初始化非const引用函数参数是否会造成内存泄漏?