12.10
我认为没有问题
12.11
process(std::shared_ptr<int>(p.get()));
会出错,传递给process的是一个临时的智能指针(使用一个内置指针初始化),在函数结束,会被系统释放,从而使p指向的内存被释放了。
12.12
auto p = new int();
auto sp = std::make_shared<int>();
process(sp);//合法,传值使用的一份拷贝,进入函数计时器+1,离开函数-1
process(new int());//不合法,内置指针不能隐式转换成智能指针
process(p);//不合法,内置指针不能隐式转换成智能指针
process(std::shared_ptr<int>(p));//不合法,离开函数内存会被释放,而p会变成空悬指针
12.13
auto sp = std::make_shared<int>();
auto p = sp.get();
delete p;
sp会变成空悬指针
本文探讨了C++中智能指针的使用及其对内存管理的影响。重点分析了std::shared_ptr的行为,包括如何正确传递智能指针以及不当使用可能导致的问题,如空悬指针。此外,还讨论了内置指针与智能指针之间的转换规则。
8228

被折叠的 条评论
为什么被折叠?



