【发布时间】:2011-07-08 05:36:34
【问题描述】:
Google 的 C++ style guide 表示“我们不使用例外”。该风格没有提到关于异常使用的 STL。由于 STL 分配器可能会失败,它们如何处理容器抛出的异常?
- 如果他们使用 STL,调用者如何获知分配失败?
push_back()或 mapoperator[]等 STL 方法不返回任何状态代码。 - 如果他们不使用 STL,他们使用什么容器实现?
【问题讨论】:
-
在我进来大喊大叫之前,我工作的商店也有同样愚蠢的惯例。我们只是忽略了现实。我打赌这也是谷歌所做的。
-
Google 有相当古老的标准。猜猜他们雇佣了很多学生,只能负担得起少数 C++ 向导。
-
@Maxim:这就是为什么您需要断言空指针,以遵循该建议。如果您不断言,则您的代码可能无法崩溃和烧毁,因为“未定义的行为”确实不是意味着“立即发生段错误”。诚然,风险很小,但请考虑例如theregister.co.uk/2009/07/17/linux_kernel_exploit
-
@Maxim:“在 0 地址映射页面是自找麻烦。” - 相当,攻击者通常是在恶意拉一些这样的特技时自找麻烦。不过,这只是一个例子。如果您表现得好像保证访问空指针会出现段错误,那么最终编译器会因不保证而使您(或像您这样的其他人)感到惊讶。程序启动后,未定义的行为可以及时返回,让恶魔飞出你的鼻子。要么尽快失败,要么不失败,但不要期望失败,然后就不会失败。