这不是一个实际问题,只是出于教育好奇心。
我刚刚在某个论坛上找到了这段代码:
std::vector<MyClass*> myvec;
for(unsigned int i = 0; i < 100; ++i) {
myvec.push_back(new MyClass( foo1 ));
}
// somewhere in the code inside a particular if statement
MyClass* replacement = new MyClass( foo2 );
delete myvec[0];
myvec[0] = replacement;
我有一个 MyClass 实例 vector ,在代码的某处我必须用其他实例替换一些实例。
为什么我必须调用删除?替换指针还不够吗?
我学到了什么:
- 外面有一些魔鬼叫memory leaks @larsmans answer
- “对于每次对 new 的调用,您都应该有一个相应的调用来删除代码中的某处。” @Dirk answer
- 我可以使用共享指针.. @CashCow answer
- 我可以使用 valgrind
最佳答案
如果你不这样做 delete
原来MyClass
,它会留在附近但无法访问,因为您删除了指向它的指针。那是一个 memory leak .
请注意,如果任何 new
初始分配中的表达式(第一个除外)抛出,然后你泄漏了先前分配的元素。
所有这些都可以通过不使用 vector
来避免。指针,但一个简单的 std::vector<MyClass>
,或者如果确实需要,也可以使用智能指针。
关于c++ - 为什么要在实例替换 vector 中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9499316/