0

我的问题是,我有一个对象,我将在初始化后立即将其推入向量中。在当前方法超出范围后很长时间将使用该向量。

代码如下所示:

DataObject *ptrDataObj = new DataObject();
Parent::DataVector.push_back(ptrDataObj);
:
:
// end of method

这种实现肯定会导致内存泄漏。但是,如果我使用 RAII 而不是指针,则 DataObject 将在 DataVector 使用它时超出范围。我看到的唯一选择可能涉及某种副本。

我已经沉浸在 C# 中很多年了,现在我正试图重新认识自己在原生世界中。

请指教..

4

2 回答 2

4

为什么您的向量通过指针而不是值来存储对象?

使您的向量成为以下之一:

  • std::vector<DataObject>
  • std::vector<std::shared_ptr<DataObject> >.

此外,如果您使用的是 C++11,则可以使用emplace_back来避免复制。

std::vector<DataObject> vec;
vec.emplace_back(constructor_arg1, constructor_arg2);
于 2012-08-25T21:49:04.653 回答
2

但是,如果我使用 RAII 而不是指针,则 DataObject 将在 DataVector 使用它时超出范围。

如果您使用得当,则不会。如果您使用引用计数智能指针,则该对象将至少与向量一样长,并且将被正确处理。

于 2012-08-25T21:49:30.930 回答