构造shared_ptr。复制 shared_ptr(); shared_ptr(nullptr_t); shared_ptr(const shared_ptr& sp); shared_ptr(shared_ptr&& sp); template<class Other> explicit shared_ptr(Other *ptr); template<class Other, class D> shared_ptr(Other *ptr, D dtor); template<class D> shared_ptr(nullptr_t ...
1.shared_ptr 1.1 shared_ptr介绍 shared_ptr主要用于托管动态分配的内存。 在程序中动态分配了一块内存,这块内存可以是变量可以是对象,为了避免内存泄露,我们必须在整个程序的所有可能跑到的分支,保证这块内存不用了之后可以得到正确的释放。 普通指针使用起来麻烦,而
shared_ptr(); shared_ptr(nullptr_t); shared_ptr(const shared_ptr& sp); shared_ptr(shared_ptr&& sp); template<class Other> explicit shared_ptr(Other *ptr); template<class Other, class D> shared_ptr(Other *ptr, D dtor); template<class D> shared_ptr(nullptr_t ptr, D dtor); templat...
概述 要确保用new动态分配的内存空间再程序各条执行路径都能被释放是一件麻烦的事情。C++11模板库的头文件中定义的智能指针,std::shared_ptr模板,就可以用来部分解决这个问题。 只要将new运算符返回的指针p交给一个shared_ptr对象“托管”,就不用担心在哪里写delete p语
shared_ptr 内部包含两个指针,一个指向对象,另一个指向控制块(control block),控制块中包含一个引用计数(reference count), 一个弱计数(weak count)和其它一些数据。 简单来说,shared_ptr实现包含了两部分: - 一个指向堆上创建的对象的裸指针,raw_ptr - 一个指向内部隐藏的、共享的管理对象。share_count_objec...
当shared_ptr智能指针实例化并且获取到该对象的所有权的时候,该引用计数就会加1。当shared_ptr智能指针实例释放的时候,其会将引用计数进行减1操作。当最后一个持有该资源所有权的shared_ptr智能指针实例释放的时候,引用计数从0递减至-1,此时代表着当前已经没有任何shared_ptr智能指针实例拥有该资源的所有权了,此时对...
shared_ptr的产生与unique_ptr类似,都是为了解决raw pointer的new和delete的成对使用,导致的野指针、内存泄漏、重复释放内存等。 不过shared_ptr与unique_ptr场景又有所不同,这里主要是一个raw pointer在不同的代码块之间传来传去的场景,或者指针指向的内存比较大,这段内存可以切分成很多小部分,但是他们却需要共享彼...
智能指针是一个包装类,内部包装了真正的数据指针(即new出来的内存地址)和一个引用计数。 当构造智能指针时(即智能指针的构造函数或者复制构造函数被调用时),引用计数会加1; 当析构智能指针时(即析构函数被调用时)引用计数会减1,并判断引用计数是否为0,为0时调用delete删除真正的数据指针; ...
// std__memory__shared_ptr_operator_bool.cpp // compile with: /EHsc #include <memory> #include <iostream> int main() { std::shared_ptr<int> sp0; std::shared_ptr<int> sp1(new int(5)); std::cout << "(bool)sp0 == " << std::boolalpha << (bool)sp0 << std::endl; std::...