C++ 如何删除动态分配的参数
我正在创造一个游戏,在这一点上我很挣扎: 在.h文件中,我有:C++ 如何删除动态分配的参数,c++,object,C++,Object,我正在创造一个游戏,在这一点上我很挣扎: 在.h文件中,我有: std::vector<int*> m_Vector; 我知道我可以通过以下方式删除Object1: delete m_Vector[0] 但是如何删除Object2? 谢谢 假设Object1有一个Object2*obj2成员,并且这是在Object1的构造函数中设置的,则需要执行以下操作: delete m_Vector[0].obj2; delete m_Vector[0]; 但是,既然你使用C++,你可
std::vector<int*> m_Vector;
我知道我可以通过以下方式删除Object1:
delete m_Vector[0]
但是如何删除Object2?
谢谢 假设
Object1
有一个Object2*obj2
成员,并且这是在Object1
的构造函数中设置的,则需要执行以下操作:
delete m_Vector[0].obj2;
delete m_Vector[0];
但是,既然你使用C++,你可能应该使用.< /P>
另外,为什么要将
Object1*
s存储在std::vector
中?看起来您正在使用new Object2()作为新Object1构造函数的参数。如果是这种情况,则第二个对象根本不存储在向量中。其次,向量只保存int*类型的对象(或整数指针)。我不完全清楚为什么需要一个带有自定义构造函数的新类来向向量添加int*。我强烈建议您查看一下vector类的相关信息。首先,您应该存储指向Object1
的指针,而不是int
另一方面,如果使用智能指针,则可以消除释放分配内存的所有问题
std::vector<std::shared_ptr<Object1>> m_Vector;
std::vector m_vector;
然后创建如下对象:
m_Vector.push_back(std::make_shared<Object1>());
m_Vector.push_back(std::make_shared());
反过来,Object1
也应该使用std::shared\u ptr
等
请注意,如果您不需要共享对象,您应该使用
std::unique_ptr
将Object1
指针存储为int
指针,这会给您带来很多问题……您尝试了什么,特别是在哪里失败了?为什么首先使用指针?为什么还要使用共享指针?如果不需要执行其他操作,只需按值存储对象OK我得到了它std::vector,但Object2 obj2不是Object1的成员它是传递给基类的参数,并删除m_vector[0]。obj2;没有work@user3885884删除m_向量[0].obj2代码>非常好可能不起作用。我在回答中确实指出,我假设Object2
成员的名称是obj2
。不要盲目地将我的代码复制到你的项目中。请先进行适当的替换。实际上,它是std::vector m_vector,是的,您是对的new Object2()是一个参数,而不是一个成员
m_Vector.push_back(std::make_shared<Object1>());