Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果共享的ptr';s的构造函数失败了?_C++_Memory Management_Smart Pointers - Fatal编程技术网

C++ 如果共享的ptr';s的构造函数失败了?

C++ 如果共享的ptr';s的构造函数失败了?,c++,memory-management,smart-pointers,C++,Memory Management,Smart Pointers,如果我理解正确,当使用指向新分配对象的指针初始化共享_ptr(来自boost、tr1、std等)时,共享_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_cl

如果我理解正确,当使用指向新分配对象的指针初始化共享_ptr(来自boost、tr1、std等)时,共享_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;
}
class my_class{};
作废我的函数(共享参数);
int main(int argc,char*argv[])
{
my_func(共享_ptr(新my_类());
返回0;
}

…如果共享的\u ptr无法为其引用计数分配内存,
my\u class
对象是否会泄漏?或者shared_ptr的构造函数是否负责删除该对象?

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

根据C++11标准(20.7.2.2.1),在
共享\u ptr
构造函数中:

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

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

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


指定相同的选项。

干杯。我确实启动了谷歌,但没有找到答案。总有一天我会学会检查源代码(即标准代码)