如何正确清理矢量/地图?

Mar*_*aux 3 c++ memory-management vector map

如果我有a vector<string*> *vect或a map<pair<string*, int*>, string*> *map,
如何清理所有内容(包括vector/map包含的所有对象)?
(一切(矢量,地图,内容,字符串,整数)分配new)

这够了吗:

delete vect;
delete map;
Run Code Online (Sandbox Code Playgroud)

Pét*_*rök 6

不,你必须遍历vector/ map,逐个删除和删除它的项目(正如@SB指出的那样,可能需要递归地处理它们的成员).

(你可以通过简单地删除项目来逃脱,如果你绝对确定在删除矢量之前不再有人会访问矢量元素 - 但删除它之前删除每个项目仍然更安全.这可以确保程序在任何时候都是正确的,从长远来看,消除了细微错误的可能性,并简化了维护工作.)

顺便说一下,这是为什么建议在集合中存储智能指针而不是原始指针的原因之一.