#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”的内存会被释放吗?
是。shared_ptr
在这里并不特殊;如果实例未分配而返回,则任何实例的析构函数都将被立即调用(当语句完成评估时);不这样做会严重破坏RAII。shared_ptr
的析构函数减少引用计数,没有其他实例拥有引用,因此析构函数将释放关联的内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句