C++ 如果共享的ptr';s的构造函数失败了?
如果我理解正确,当使用指向新分配对象的指针初始化共享_ptr(来自boost、tr1、std等)时,共享_ptr的构造函数会分配少量内存来保存它管理的指针的引用计数。如果分配失败怎么办?在以下代码中: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
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
在采用用户定义的删除器的构造函数版本中,将使用删除器
指定相同的选项。干杯。我确实启动了谷歌,但没有找到答案。总有一天我会学会检查源代码(即标准代码)