我的问题是,我有一个对象,我会在初始化后立即将其插入 vector 中。该 vector 将在当前方法超出范围后很长时间内使用。
代码如下所示:
DataObject *ptrDataObj = new DataObject();
Parent::DataVector.push_back(ptrDataObj);
:
:
// end of method
此实现肯定会导致内存泄漏。但是,如果我使用 RAII 而不是指针,则当 DataVector 使用它时,DataObject 将超出范围。我看到的唯一选择可能涉及某种拷贝。
我已经沉浸在 C# 中很多年了,我正在努力重新认识自己的原生世界。
请指教..
最佳答案
为什么您的 vector 通过指针而不是值存储对象?
让你的 vector 成为以下之一:
-
std::vector<DataObject>
-
std::vector<std::shared_ptr<DataObject> >
.
此外,如果您使用的是 C++11,则可以使用 emplace_back
以避免复制。
std::vector<DataObject> vec;
vec.emplace_back(constructor_arg1, constructor_arg2);
关于c++ - 当我无法立即处理数据时,如何避免内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125914/