std :: tr1 :: shared_ptr抛出bad_alloc并且是一个好主意在try/catch块中吗?

Neo*_*rge 4 c++ boost

我实际上正在制作一个简单的C++ SFML游戏,我想学习更多关于C++编程的知识.

现在我使用shared_ptr来管理资源.在创建新资源时,我对shared_ptrs有一些疑问,例如:

    shared_ptr< Resource > resource( new Resource( World::LEVEL ) );
Run Code Online (Sandbox Code Playgroud)

根据boost shared_ptr <class Y>(Y*p)抛出bad_alloc.我不知道如果std :: tr1做同样的事情.而且我不知道是否应该担心将shared_ptr放在try/catch块中以检查是否抛出了bad_alloc.这是一个很好的编程习惯吗?

Mah*_*dsi 9

根据C++ 2011标准,§20.7.2.2.16:

template<class Y> explicit shared_ptr(Y* p);

抛出:bad_alloc或者,当无法获得除内存之外的资源时,实现定义的异常.

当您知道如何处理它们时,您会捕获异常.如果你要处理一个内存不足的异常并且有代码这样做,那么一定要把它放在try-catch中.如果您没有编写任务关键代码,并且不希望在系统内存限制的边缘运行,则可能没有必要.请注意,您编写的几乎每行代码都会在系统内存不足时抛出异常.

重要的是要注意,在现代硬件/操作系统上,"内存不足"并不意味着你已经超出了物理内存限制 - 你只能拥有128MiB的内存而且即使使用10倍的内存也不会出错,你可以拥有8GiB的物理内存,当你只使用了那么多的时候就会出现这个错误.这指的是您的应用程序可用的内存空间,操作系统将在必要时将其分页到磁盘(并假设可用的磁盘空间).