繁体   English   中英

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

[英]how do i avoid a memory leak when i can't dispose of the data right away

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

代码如下:

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

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

我已经沉迷于C#多年了,并试图再次重新认识自己。

请指教..

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

使向量成为以下之一:

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

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

std::vector<DataObject> vec;
vec.emplace_back(constructor_arg1, constructor_arg2);

但是,如果我使用RAII而不是指针,那么到DataVector使用它时,DataObject就会超出范围。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM