shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。再最后一个shared_ptr析构的时候,...
每个shared_ptr都有一个关联的计数值,通常称为引用计数。无论何时我们拷贝一个shared_ptr,计数器都会递增。 例如,当用一个shared_ptr初始化另一个shred_ptr,或将它当做参数传递给一个函数以及作为函数的返回值时,它 所关联的计数器就会递增。当我们给shared_ptr赋予一个新值或是shared_ptr被销毁(例如一个局部的 ...
标准库提供了std::weak_ptr,weak_ptr是shared_ptr的观察者,它与一个shared_ptr绑定,但是却不参与引用计数的计算,在需要时,它还能生成一个与它所观察的shared_ptr共享引用计数器的新的shared_ptr,总而言之,weak_ptr的作用就是:在需要时生成一个与绑定的shared_ptr共享引用计数器的新shared_ptr,在其他时候不干扰...
std::shared_ptr是C++标准库中定义的智能指针,它使用引用计数机制来管理资源的生命周期。引用计数机制是通过在std::shared_ptr内部维护一个计数器来实现的,该计数器记录有多少个std::shared_ptr共享同一个资源。 当一个std::shared_ptr指向某个资源时,该资源的引用计数会加1;当std::shared_ptr被销毁或重新赋值...
只有引用计数为0时,shared_ptr才会自动释放引用的内存资源。对shared_ptr进行初始化时不能将一个普通指针直接赋值给智能指针,因为一个是指针,一个是类。可以通过make_shared函数或者通过构造函数传入普通指针,并可以通过get函数获得普通指针。 为什么要使用智能指针...
shared_ptr 的引用计数也导致“循环引用”的问题,这在把 shared_ptr 作为类成员的时候最容易出现。 如果有容易产生“循环引用”的场合,可以考虑使用weak_ptr,weak_ptr 是专门为了打破循环引用而设计,它只观察指针,不会增加引用计数,但是在需要的时候,可以调用成员函数 lock(),获取 shared_ptr。
std::cout << "ptr2 use count: " << ptr2.use_count() << std::endl; // 输出引用计数 ptr2.reset(); // ptr2也不再指向MyClass对象,引用计数减1,此时引用计数为0,MyClass对象被自动销毁 return 0; } 在这个示例中,我们创建了一个名为MyClass的简单类,并使用shared_ptr来管理它的生命周期。当...
shared_ptr 类描述使用引用计数来管理资源的对象。 shared_ptr 对象有效保留一个指向其拥有的资源的指针或保留一个 null 指针。 资源可由多个 shared_ptr 对象拥有;当拥有特定资源的最后一个 shared_ptr 对象被销毁后,资源将释放。在重新分配或重置资源后,shared_ptr 将停止拥有该资源。
shared_ptr基础 智能指针是存储动态分配对象指针的类,用于生命周期的控制。当指针离开其作用域时,自动销毁动态分配的空间,防止内存泄漏。 使用智能指针需要包含头文件#include<memory> std::shared_ptr采用引用计数,每一个shared_ptr的拷贝都指向相同的内容,当最后一个shared_ptr析构的时候,内存被释放 ...