不拥有任何指针的shared_ptr称为空shared_ptr。不指向任何对象的shared_ptr称为 null shared_ptr,不应取消引用。请注意,空shared_ptr不一定是 null shared_ptr,null shared_ptr不一定是空shared_ptr。 shared_ptr对象通过运算符 * 和 -> 提供对它们所指向的对象的访问,从而复制有限的指针功能。出于安全原因,它们...
shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 make_shared的标准库函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。与智能指针一样,ma...
shared_ptr<int> sp(newint(10));//一个指向整数的shared_ptrassert(sp.unique());//现在shared_ptr是指针的唯一持有者shared_ptr<int> sp2 = sp;//第二个shared_ptr,拷贝构造函数assert(sp == sp2 && sp.use_count() ==2);//两个shared_ptr相等,指向同一个对象,引用计数为2*sp2 =100;//使用...
shared_ptr则实现了资源共享,通过计数机制跟踪资源的拥有者数量。use_count()函数可查看计数。通过new、auto_ptr、unique_ptr和weak_ptr构造shared_ptr。release()方法会释放资源所有权,当计数降至零时,资源将被释放。weak_ptr旨在解决shared_ptr之间的死锁问题。它提供弱引用,不会增加对象引用计数。we...
int* ptr = nullptr; // 使用 nullptr 初始化指针 1. 2. 检查指针是否为空 在解引用指针之前,总是检查它是否为空。 if (ptr != nullptr) { // 现在可以安全地使用 ptr } 1. 2. 3. 3. 使用智能指针 C++11 引入了智能指针,如std::unique_ptr和std::shared_ptr,它们可以自动管理内存,并在尝试解引...
1、shared_ptr智能指针的创建 shared_ptr 类模板中,提供了多种实用的构造函数,这里给读者列举了几个常用的构造函数(以构建指向 int 类型数据的智能指针为例)。 1) 通过如下 2 种方式,可以构造出 shared_ptr 类型的空智能指针: 注意,空的 shared_ptr 指针,其初始引用计数为 0,而不是 1。
std::shared_ptr<T> ptr; 这样构造的话,ptr 的意义就相当于一个 NULL 指针。当试图在一个空指针上做类似于 *ptr 或者 ptr->xx 之类的东西的时候,会出现异常错误 (2)直接从 new 操作符的返回值构造 std::shared_ptr<T> ptr(new T()); //引用计数加 1 ...
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr)。 不想看toy code的读者可以直接拉到文章最后看这部分的总结。 shared_ptr shared_ptr 基本用法 shared_ptr采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计...
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo")); 许多google和stackoverflow帖子就在这里,但我无法理解为什么make_shared比直接使用更有效shared_ptr。 有人可以一步一步解释我创建的对象序列和两者所做的操作,这样我就能理解make_shared...
1. shared_ptr shared_ptr需要记住一句话,它可以允许多个指针指向同一个对象。 1.1 使用举例 我们可以使用如下的方式来声明一个智能指针,这个指针指向int类型的指针,我把它命名为ptr1,目前这个指针是默认初始化的形式,保存的是一个空指针。 shared_ptr<int>ptr1; ...