我的问题是这个,我有一个对象,我会在初始化后立即将其推入向量中。在当前方法超出范围之后很久就会使用该向量。
代码如下所示:
DataObject *ptrDataObj = new DataObject();
Parent::DataVector.push_back(ptrDataObj);
:
:
// end of method
此实现肯定会导致内存泄漏。但是,如果我使用RAII而不是指针,则在DataVector使用它时,DataObject将超出范围。我看到的唯一选择可能涉及某种副本。
我已经沉浸在C#中多年了,我正试图重新找回自己在本土的世界。
请告知..
答案 0 :(得分: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);
答案 1 :(得分:2)
但是,如果我使用RAII而不是指针,那么在DataVector使用它时,DataObject将超出范围。
如果您使用得当,请不要。如果使用引用计数智能指针,则该对象将至少与向量一样长,并且将被正确处理。