8

如果我理解正确,当使用指向新分配对象的指针初始化 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;
}

...my_class如果 shared_ptr 未能为其引用计数分配内存,该对象是否会泄漏?还是 shared_ptr 的构造函数负责删除对象?

4

1 回答 1

7

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

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

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

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

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

Boost文档指定相同。

于 2012-08-12T12:47:34.277 回答