std :: tr1 :: shared_ptr throw bad_alloc,也是一个好主意
Does std::tr1::shared_ptr throw bad_alloc and a good idea to be in try/catch block?
我实际上是在制作一个简单的C SFML游戏,我想了解更多的C 编程。
现在,我正在使用shared_ptr来管理资源。在创建一个新资源时,我对共享_ptr有一些疑问:
shared_ptr< Resource > resource( new Resource( World::LEVEL ) );
根据boost shared_ptr&lt;Y>(y * p)抛出bad_alloc。我不知道如果std :: TR1也这样做。而且我不知道是否应该担心将共享_ptr放入尝试/捕获块中以检查bad_alloc是否被抛弃。这是一个很好的编程实践吗?
根据C 2011标准,§20.7.2.2.1¶6:
template<class Y> explicit shared_ptr(Y* p);
投掷:
bad_alloc
或 当内存以外的其他资源时,实现定义的异常 无法获得。
当您知道如何处理它们时,您会发现异常。如果您要处理失误的异常,并且有代码可以这样做,那么一定要将其放入试用。如果您不编写关键任务代码,并且不要期望在系统内存约束的边缘运行,则可能没有必要。请注意,您编写的每一行代码几乎都可以在系统不在存储器上时会引发异常。
重要的是要注意,在现代硬件/操作系统上,"不记忆"并不意味着您超出了物理内存约束 - 即使您使用的是,您也只能拥有128mib的内存,也不会出现错误这是10倍,您可以拥有8GIB的物理内存,并在只使用一半的一半时就会出现错误。这是指您应用程序可用的内存空间,如果需要,操作系统将在该应用程序上磁盘(并假设可用的磁盘空间)。
shared_ptr
需要分配计数器,因此可以投掷 bad_alloc
。(IIRC,当它这样做时,它调用在指针传递到它。)
您是否需要抓住它是另一个问题;你几乎当然不需要在创建的功能中捕获它shared_ptr
。这只是另一个失败的分配,并且无论您处理失败,都应抓住(或不)分配。
- 常量参考延长对象的寿命,然后是const_cast,这是一个好主意吗?
- 将C 11设置功能更改为带有转发的现代模板功能是一个好主意
- std :: tr1 :: shared_ptr throw bad_alloc,也是一个好主意
- 在构造函数中循环C++是一个好主意吗?
- 是一个哨兵 QWidget 一个好主意(以防止在创建和填充布局时出现内存泄漏)
- C++正在创建一个头来解决循环依赖关系,这是一个好主意
- 在构造函数中为另一个相同类型的对象构造对象是个好主意吗
- 如果我将所有函数都作为类的静态方法,这是一个好主意
- 使用 "-g" 标志进行生产是否是一个好主意?
- 中央Typedefs.h文件 - 这是一个好主意
- 预处理器强制一致性,这是C++中的一个好主意
- 在编译的代码中包含一个大的文本变量是个好主意吗
- 一个尝试非确定性有限状态机(c++),是静态std::map的好主意
- 如果一个程序的主要功能是从磁盘中读取数据,那么让它多线程是不是一个好主意?
- 通过函数指针在游戏引擎数学库中使用SIMD ~一个好主意
- 每次使用RNG时都播种一个好主意
- 为什么内联构造函数和析构函数在c++中不是一个好主意
- 数组声明在.h文件,这是一个好主意
- 通过'元组'和'tie',一个好主意
- 什么时候使用std::promise优于其他std::线程机制是一个好主意?