【发布时间】:2012-04-10 22:09:38
【问题描述】:
我想在objList 中存储10 个Obj 对象,但我不知道在这种情况下何时使用delete 是合适的。如果我在下面代码中注释的行中使用delete Obj;,Obj 是否仍会存储在objList 中?
struct Obj {
int u;
int v;
};
vector<Obj> objList;
int main() {
for(int i = 0; i < 10; i++) {
Obj *obj = new Obj();
obj->u = i;
obj->v = i + 1;
objList.push_back(*obj);
// Should i use "delete Obj;" here?
}
}
【问题讨论】:
-
new在这里根本不需要。使用Obj obj;在堆栈上创建对象。 -
即使你确实需要
new,那么一个简单的delete也不够——如果push_back抛出,那么你就有了泄漏。您应该始终使用smart pointers 或其他RAII 对象来管理动态资源。
标签: c++ memory-management