如果我忽略返回类型shared_ptr函数的返回值怎么办

what if I ignore the return value of a function with shared_ptr return type

本文关键字:函数 ptr 返回值 怎么办 shared 返回类型 如果      更新时间:2023-10-16
#include <iostream>
#include <memory>
using namespace std;
shared_ptr<string> func()
{
shared_ptr<string> ptr = make_shared<string>("smart poiter");
return ptr;
}
int main(int argc, char const *argv[])
{
func();
cout << "pause" << endl;
return 0;
}

像上面的代码,字符串"Smart Poiter"的内存会被释放吗?

是的。内部计数器将达到0,内存将安全释放。

是的。shared_ptr在这里并不特别;如果返回实例而未分配,则将立即调用任何实例的析构函数(当语句完成计算时(;不这样做会以关键的方式破坏 RAII。shared_ptr的析构函数递减引用计数,没有其他实例拥有引用,因此析构函数将释放关联的内存。