如果shared_ptr的构造函数失败会发生什么?

时间:2012-08-12 12:41:43

标签: c++ memory-management smart-pointers

如果我理解正确,当一个shared_ptr(来自boost,tr1,std,等等)用一个指向新分配对象的指针初始化时,shared_ptr的构造函数会分配少量内存来保存指针的引用计数它管理。如果分配失败会怎么样?在以下代码中:

class my_class {};
void my_func(shared_ptr<my_class> arg);

int main(int argc, char* argv[])
{
    my_func(shared_ptr<my_class>(new my_class()));
    return 0;
}

...如果shared_ptr无法为其引用计数分配内存,那么my_class对象是否会被泄露?或者shared_ptr的构造函数是否负责删除对象?

1 个答案:

答案 0 :(得分:7)

即使my_class无法分配内存,您的代码也不会泄漏shared_ptr对象。

根据C ++ 11标准(20.7.2.2.1),在shared_ptr构造函数中:

  

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

     

异常安全:如果抛出异常,则调用delete p。

在采用用户定义的删除器的构造函数版本中,将使用删除器。

Boost documentation指定相同的内容。

相关问题