相关疑难解决方法(0)

清理STL列表/指针向量

为了安全地清理向量或指针列表,你可以用最短的C++块来实现什么?(假设您必须在指针上调用delete?)

list<Foo*> foo_list;
Run Code Online (Sandbox Code Playgroud)

我宁愿不使用Boost或用智能指针包装我的指针.

c++ stl

49
推荐指数
8
解决办法
9万
查看次数

可能STL迭代器方法抛出异常

析构函数可能不会抛出异常(因此在异常处理期间可以完成堆栈展开),并且必须释放分配给该对象的任何资源(因此不会泄漏资源).包含多个其他对象(或分配了多个资源)的对象的设计可能会在STL容器中记录指向它们的指针.因此析构函数将使用以下与迭代器相关的方法:

  • begin(),end()对于容器
  • operator++ 对于有效的迭代器
  • operator*或者operator->对于有效的迭代器

但是为了保证析构函数不会抛出异常并释放其资源,您需要依赖那些永远不会抛出异常的方法.

依赖那些从不抛出异常的方法是否安全?很难想象一个实际的实现会抛出异常,因为STL迭代器本质上是一个指针.但标准C++是否要求这些方法永远不会抛出异常?我没有在C++标准中找到明确的陈述.


编辑:有趣的情况是C++ 03,当你想拥有一个指向资源的容器.这样做有充分的理由; 例如,如果您有多态资源.正如BjörnPollex在他的回答中指出的那样,如果你使用一个资源容器(比如a std::list< Resource >)而不是一个指向资源的指针的容器,容器的析构函数将为你处理对象的破坏(释放)Resource.

c++ stl exception

18
推荐指数
2
解决办法
5397
查看次数

标签 统计

c++ ×2

stl ×2

exception ×1