相关疑难解决方法(0)

可能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
查看次数

不使用STL的原因?

可能重复:
对于STL或!STL,这是个问题

是否有人应避免在他/她的项目中使用C++ STL?

c++ stl

15
推荐指数
4
解决办法
4077
查看次数

为什么有些库必须实现基本数据结构?

一些开源库倾向于重新实现基本结构,如字符串,列表,堆栈,队列......为什么他们不使用stl库?是不是还不够好?

c++ open-source data-structures

5
推荐指数
2
解决办法
265
查看次数

我应该学习使用 C++ STL 容器而不是构建它们吗?

我在大学课程中学习了数据结构和算法,他们教我们如何实现它们。在阅读了 SO 和 Quora 上的一些答案后,似乎建议使用 STL 容器。

c++ stl

0
推荐指数
1
解决办法
425
查看次数

是否与"C++哲学"兼容,以重新编码您自己的智能指针

我对所有C++编码器都有一个小问题!对于您来说,它是否与"C++哲学"兼容,以重新编码您自己的智能指针.实际上我将shared_ptr与weak_ptr一起用于项目,但它使代码过于复杂.我当然可以使用raw_ptr,但是......它是"普通c"......所以你怎么看待它?我应该重新编写自己的智能指针还是继续将shared_ptr与weak_ptr一起使用

c++ smart-pointers shared-ptr weak-ptr

-1
推荐指数
1
解决办法
83
查看次数