c++ - 当我无法立即处理数据时,如何避免内存泄漏

标签 c++

我的问题是,我有一个对象,我会在初始化后立即将其插入 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/

相关文章:

c++ - 编译器会做什么

C++ 将字符串数据包转换为 iphdr - 字符串数据包的格式应该是什么?

c++ - O(log n) 算法在预排序列表的 union 中查找具有等级 i 的元素

c++ - 测量 CUDA 分配时间

c++ - C++中 "free function"这个词是什么意思?

C++静态成员函数错误C2556重载函数仅返回类型不同

c++ - 什么是 boost::variant 内存和性能成本?

c++ - 如何在C++中将std::string::const_iterator类型转换为int类型

c++ - 从主线程询问运行对象表 (ROT) 时出错

c++ - 是否可以编写一个像 next_permutation 这样的函数,但它只排列 r 值,而不是 n 值?