【发布时间】:2011-12-19 13:28:20
【问题描述】:
我担心通过执行以下操作会遇到内存泄漏问题:
(示例代码)
class myItem //random container stuff mostly. All primatives.
{
int index;
char* name;
int val1;
int val2;
};
class vecList
{
vector< myitem* > *myVec;
void delete()
{
MyVec->erase(std::remove_if(myVec->begin(), MyVec->end(), IsMarkedToDelete), MyVec->end()); //leak here?
}
};
如果是指针,擦除不会释放内存,对吧?如果我没有使用 remove_if,我可以在销毁指针之前调用 delete。在这种情况下我该怎么做?智能指针?我不想用它们重新实现所有东西,我也不想添加 boost 库。
谢谢!
【问题讨论】:
-
这取决于
myitem的创建方式以及myitem究竟包含什么... -
一般 C++ 建议:如果您使用的是原始指针,那么您做错了。 (这不是绝对的,但是那些知道自己在做什么的人知道什么时候可以忽略这个建议。)
-
@Kerrek:使用小型
nonowning_ptr包装类,它本质上是一个原始指针,但具有描述性名称,您可以完全避免使用原始指针。 :) -
@Xeo:是的。当您这样做时,您可能已经知道如何执行 OP 要求的操作 :-)
-
安全地销毁由 STL 指针容器引用的对象很棘手,因为 STL 迭代器操作可能会引发异常:stackoverflow.com/questions/7902452/…
标签: c++ memory-leaks vector erase remove-if