`

shared_ptr(new)

 
阅读更多
#include <memory>
#include <string>
#include <iostream>
using namespace std;

int main()
{
	shared_ptr<string> p = make_shared<string>("a");
	cout << "p use_count:" << p.use_count() << endl;
	string *p1 = p.get();
	cout << "*p:" << *p << ",*p1:" << *p1 << endl;
	cout << "p use_count:" << p.use_count() << endl;
	auto p2 = p;
	cout << "p use_count:" << p.use_count() << endl;
	shared_ptr<string> p3(p);
	cout << "p use_count:" << p.use_count() << endl;
	shared_ptr<string> p4 = make_shared<string>("b");
	p3 = p4;
	cout << "p use_count:" << p.use_count() << endl;
	p2.~shared_ptr();//...
	cout << "p use_count:" << p.use_count() << endl;
	if(p.unique()){
		cout << "p is unique";
	}
}

p use_count:1
*p:a,*p1:a
p use_count:1
p use_count:2
p use_count:3
p use_count:2
p use_count:1
p is unique
分享到:
评论

相关推荐

    智能指针shared_ptr的Demo

    1. 直接构造:`std::shared_ptr&lt;T&gt; ptr(new T(args))`,这将创建一个新的`T`类型对象,并使用`new`运算符分配内存。 2. 通过`make_shared`函数:`std::shared_ptr&lt;T&gt; ptr = std::make_shared(args)`,这是更高效的...

    shared_ptr只能对new的内存操作

    ### shared_ptr只能对new的内存操作 在C++标准库中,`std::shared_ptr`(在早期版本中可能使用`boost::shared_ptr`)是一种智能指针,它通过引用计数来管理动态分配的对象生命周期。`std::shared_ptr`的设计目的是...

    C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)

    本文主要讨论了三种智能指针:`shared_ptr`、`unique_ptr`和`weak_ptr`。 首先,`shared_ptr`是引用计数型智能指针,它维护了一个内部的引用计数,用于跟踪有多少个`shared_ptr`实例指向同一对象。当创建一个新的`...

    C++11 std::shared_ptr总结与使用示例代码详解

    std::shared_ptr&lt;Test&gt; p(new Test); 四、std::shared_ptr的大小 std::shared_ptr的大小是原始指针的两倍,因为它的内部有一个原始指针指向资源,同时有个指针指向引用计数。 五、std::shared_ptr的拷贝 std::...

    test_share_ptr

    1. 创建:你可以通过`new`操作符创建对象并直接传递给`std::shared_ptr`,或者使用`std::make_shared`,后者通常更高效,因为它可以一次性分配对象和控制块的内存。 ```cpp std::shared_ptr&lt;int&gt; ptr(new int(5)); ...

    C++智能指针shared_ptr分析

    C++智能指针shared_ptr分析 概要: shared_ptr是c++智能指针中适用场景多,功能实现较多的智能指针。它采取引用计数的方法来实现释放指针所指向的资源。下面是我代码实现的基本功能。 实例代码: template class ...

    C++11 智能指针之shared_ptr代码详解

    在不使用make_shared的情况下,也可以直接使用new操作符来创建对象,并将原始指针传递给shared_ptr的构造函数: ```cpp shared_ptr&lt;int&gt; sp(new int(42)); ``` 但这种方式需要确保new操作符返回的指针被正确的初始...

    奇妙的C++——智能指针

    例如,当你使用new创建一个对象时,可以立即将其赋值给一个std::unique_ptr或std::shared_ptr,这样就不必担心忘记调用delete。智能指针在作用域结束时会自动调用delete,消除了内存泄漏的风险。 在`src`目录下,...

    shared-ptr(智能指针)举例.pdf

    与直接使用`new`和`shared_ptr`相比,`make_shared`通常更高效,因为它只需要一次内存分配,同时处理对象和引用计数。 使用`make_shared`的例子如下: ```cpp std::shared_ptr&lt;int&gt; p1 = std::make_shared(66); ...

    C++智能指针shared-ptr讲解与使用.pdf

    在这个例子中,`ptr`是一个指向`int`类型的`shared_ptr`,并且已经用`new`关键字动态分配了一个值为5的`int`对象。 `shared_ptr`支持多种操作,包括访问所指对象、拷贝和赋值。拷贝构造或赋值操作不会导致原始对象...

    智能指针shared-ptr的用法.pdf

    例如,可以通过`std::shared_ptr(new T(args))`或`std::make_shared(args)`创建并初始化对象。reset方法则可以用来改变shared_ptr所指向的对象,或者释放当前对象并置空。 在某些情况下,可能需要自定义删除器,这...

    C++智能指针:shared-ptr用法详解.pdf

    使用`make_shared`比直接使用`new`和`shared_ptr`构造函数更高效,因为它可以优化内存分配。 **6. 自定义删除器** `shared_ptr`的构造函数允许指定一个自定义的删除器,用于在对象析构时执行特定的操作,而不是默认...

    智能指针shared-ptr的初始化.pdf

    这样做的好处包括性能优化(因为`make_shared`能够一次性完成内存分配和对象构造,而不是分两步进行)和避免了潜在的二义性问题(如果直接使用new操作符,可能会出现两个`shared_ptr`拥有同一对象但各自维护不同引用...

    C++智能指针-unique-ptr智能指针详解.pdf

    5. **不支持`make_unique`**:与`shared_ptr`不同,C++11标准并未提供`make_unique`函数,因此无法像初始化`shared_ptr`那样便捷地创建`unique_ptr`。 `unique_ptr`的这些特性使其成为管理动态内存的理想选择,尤其...

    auto_ptr指针介绍(智能指针).

    尽管在C++11及以后版本中引入了更强大的智能指针如`unique_ptr`和`shared_ptr`,但了解`auto_ptr`的基本概念和用法对于理解智能指针仍然非常重要。 #### `auto_ptr`的概念与作用 `auto_ptr`主要用来管理动态分配的...

    C++11智能指针之weak_ptr详解

    shared_ptr&lt;int&gt; sp(new int(5)); weak_ptr&lt;int&gt; wp(sp); ``` 在这个例子中,`wp`被初始化为指向`sp`所管理的对象,但`sp`的引用计数并未增加。 3.2 检查`weak_ptr`的有效性 由于`weak_ptr`不控制对象的生命周期...

Global site tag (gtag.js) - Google Analytics