【问题标题】:how to delete dynamically allocated parameter如何删除动态分配的参数
【发布时间】:2014-07-29 20:35:14
【问题描述】:

我正在创建一款游戏,但此时我很挣扎:

在我拥有的 .h 文件中:

std::vector<int*> m_Vector; 

然后在.cpp文件中:

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

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

 delete m_Vector[0]

但是我怎样才能删除 Object2? 谢谢!

【问题讨论】:

  • Object1 指针存储为int 指针会给你带来很多问题...
  • 你尝试了什么,特别是在哪里失败了?
  • 为什么是指针?

标签: c++ object


【解决方案1】:

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

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

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

另外,你为什么将Object1*s 存储在std::vector&lt;int*&gt; 中?

【讨论】:

  • 好的,我知道了 std::vector 但是 Object2 obj2 不是 Object1 的成员,它是传递给基类的参数,然后删除 m_Vector[0].obj2;没用
  • @user3885884 delete m_Vector[0].obj2; 很好可能不起作用。我确实在回答中声明我假设Object2 成员的名称是obj2。不要只是盲目地将我的代码复制到您的项目中。请先进行适当的替换。
【解决方案2】:

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

【讨论】:

  • 实际上,它是 std::vector m_Vector,是的,你是对的 new Object2() 是参数而不是成员
【解决方案3】:

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

【讨论】:

  • 为什么还要使用共享指针?如果没有必要做其他事情,只需按值存储对象
猜你喜欢
  • 1970-01-01
  • 2018-05-01
  • 2012-04-02
  • 1970-01-01
  • 2015-08-23
  • 2011-06-07
  • 1970-01-01
  • 2018-07-10
  • 2013-12-27
相关资源
最近更新 更多