【发布时间】:2010-09-23 08:28:46
【问题描述】:
为了安全地清理 std::vector 或 std::list 的指针,你能想到的最短的 C++ 块是什么? (假设你必须在指针上调用 delete?)
list<Foo*> foo_list;
我宁愿不使用 Boost 或用智能指针包装我的指针。
【问题讨论】:
-
依赖容器外的代码来删除你的指针真的很危险。例如,当容器由于抛出异常而被破坏时会发生什么?我知道你说过你不喜欢 boost,但请考虑boost pointer containers。
-
智能指针(包括 Boost::shared_ptr)会在您很难看到它是手动完成的情况下删除您的对象。
-
其中一个陷阱是,反常的是,STL 允许几个重要的迭代器操作抛出异常。这使得许多通过容器使用迭代的“明显”方法不安全。见stackoverflow.com/questions/7902452/…