方式一:shared_ptr<string> pTom{new string("tom")}; 方式二:shared_ptr<string> pTom; pTom.reset(new string("tom")); 方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用 shared_ptr<string> pTom = make_shared<string>("tom");...
以下是 std::shared_ptr 的基本用法示例以及一些高级特性: 1. 基本用法 创建和使用 std::shared_ptr #include <iostream> #include <memory> // 需要包含此头文件 #include <vector> void example() { // 创建一个 std::shared_ptr 管理动态分配的 int 对象 std::shared_ptr<int> ptr1 = std::make...
std::shared_ptr<int> sp(newint[10], std::default_delete<int[]>()); 也可以使用一下的lambda表达式来自定义删除函数 std::shared_ptr<int> sp(newint[10], [](int*p) {delete[] p; }); 实际上,除非需要共享目标,否则unique_ptr更适合使用数组: std::unique_ptr<int[]> up(newint[10]);/...
std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>(42); // 访问对象的方法 std::cout << "Value: " << ptr1->GetValue() << std::endl; // 创建另一个 shared_ptr,共享 ptr1 所指向的对象 std::shared_ptr<MyClass> ptr2(ptr1); // 当 ptr1 和 ptr2 都离开作用域时,MyC...
std::shared_ptr<int> p(new int(5)); int *pInt = p.get() 3.指定删除器 默认删除器不支持数组对象,所以需要指定删除器。 4.注意事项 原始指针只能初始化一个shared_ptr; 在函数实参中不创建shared_ptr; 禁止通过shared_from_this()返回this,这样做可能造成二次析构; ...
std::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。 std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数。例如: ...
std::shared_ptr 是通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的 shared_ptr 被销毁; 最后剩下的占有对象的 shared_ptr 被通过 operator= 或reset() 赋值为另一指针。 用delete 表达式或在构造期间提供给 ...
share_ptr没有release接口。 classA{public:A(inta):m_a(a){std::cout<<"contruct:"<<m_a<<endl;}~A(){std::cout<<"destruct:"<<m_a<<endl;}intm_a;};intfunc(){std::shared_ptr<A>sp1;A*p=newA(1);sp1.reset(p);//A(1)这个对象(这片内存)引用计数+1sp1.reset(newA(2));//旧对...
std::shared_ptr⼤概总结有以下⼏点:(1) 智能指针主要的⽤途就是⽅便资源的管理,⾃动释放没有指针引⽤的资源。(2) 使⽤引⽤计数来标识是否有多余指针指向该资源。(注意,shart_ptr本⾝指针会占1个引⽤)(3) 在赋值操作中, 原来资源的引⽤计数会减⼀,新指向的资源引⽤计数会加⼀...
2.用std::make_shared<>()或std::make_unique<> 不得行,莫得这种操作,可以用上面那种然后 =std::move(); 3.其他方式的自定义删除器 //数组放在堆中std::shared_ptr<Sample>p(newSample[5],std::default_delete<Sample[]>()); //仿函数方式classDeleter{public:voidoperator()(Sample*x){std::cout<...