如果我忽略返回类型shared_ptr函数的返回值怎么办
what if I ignore the return value of a function with shared_ptr return type
#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
的析构函数递减引用计数,没有其他实例拥有引用,因此析构函数将释放关联的内存。
相关文章:
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 视觉 C++编译器在计算其参数之前是否允许将函数 ptr 存储在寄存器中?
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误
- 通过成员函数将唯一 ptr 的向量附加到另一个向量
- 如何将函数 ptr 分配给函数 ptrs 数组(Arduino C++)
- 带智能ptr的Pimpl-为什么需要构造函数/析构函数
- 如何将shared_ptr传递给裸 ptr 函数
- 将 lamba 隐式转换为函数 ptr 以创建类
- c++在没有虚拟析构函数的多态性中共享ptr
- 如何调用传递的函数(函数 ptr 作为参数传递给函数)
- OpenCL enqueueWriteImage no const void* ptr 在包装器中C++但在 C 函数中
- 正在从DLL获取函数PTR
- 从虚拟成员函数ptr中进行类型推导(bug?)
- 为什么这个显式析构函数会导致共享ptr中的内存损坏
- 如何访问受保护的基类函数,从派生类通过基类ptr
- openv Ptr类.指针对象在调用函数后被删除
- 函数PTR转换为带模板参数的函数
- 删除从函数返回的唯一ptr
- 具有基类唯一ptr的类的复制构造函数