上面的代码可以使用shared_ptr来改写,更简单: #include<memory> //使用shared_ptr需要包含这个头文件 using namespace std; void g(void){ shared_ptr<int> ptr = make_shared<int>();//手动申请一个堆上的无名int变量,交给智能指针对象ptr来管理 int b; //这里无须手动释放ptr指向的内存,ptr的析构函数会...
shared_ptr 有两个特性:特性1:对raw pointer进行了一层封装,让C++程序员不用在担心何时去释放分配好的内存。 特性2:共享,使用shared_ptr的指针可以共享同一块内存中的数据。 思想是:该类型智能指针在实现上采用的是引用计数机制,即便有一个 shared_ptr 指针放弃了堆内存的“使用权”(引用计数减 1),也不会影响...
返回值和形参应该尽量设置为const和&。如代码中const std::string&作为返回值的原因为:const保证了data智能指针不会再外部被修改,&减少了一次拷贝操作。 const成员函数中不能修改成员变量,但是可以修改成员指针所指向对象。如const std::string& front() const中修改data所指对象,但是不能修改data本身。 std::out_o...
shared_ptr是最像指针的智能指针,在很多的组件中被应用,shared_ptr包装了new操作符在堆上分配的动态对象,实现的是引用计数型的智能指针,可以被自由的拷贝和赋值,当没有代码使用(引用计数减为0)时会删除包装的动态分配的对象。 shared_ptr也可以安全地放在标准的容器中,是在STL容器中存储指针的最标准解法。
智能指针(Shared_ptr)是一种C++语言中的智能指针类型,用于管理动态分配的内存资源。它是一种引用计数的智能指针,可以自动追踪和管理指向堆上对象的引用计数。 智能指针的主要作用是解决手动内存管理的问题,避免内存泄漏和悬挂指针等问题。它通过在堆上分配内存时创建一个引用计数,每当有一个新的智能指针指向该内存时,...
该类没有重载*和->运算符,从这点看shared_ptr似乎无法实现普通指针的功能,推测这两个运算符的重载是在父类__shared_ptr实现的 该类没有析构函数,从智能指针最终会自动释放内存的特性来看,释放工作肯定不是在该类进行了,接下来分析父类__shared_ptr的实现 ...
weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对象的一个访问手段。weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另...
智能指针是一个包装类,内部包装了真正的数据指针(即new出来的内存地址)和一个引用计数。 当构造智能指针时(即智能指针的构造函数或者复制构造函数被调用时),引用计数会加1; 当析构智能指针时(即析构函数被调用时)引用计数会减1,并判断引用计数是否为0,为0时调用delete删除真正的数据指针; ...
要确保用 new 动态分配的内存空间在程序的各条执行路径都能被释放是一件麻烦的事情。C++ 11 模板库的 <memory> 头文件中定义的智能指针,即 shared _ptr 模板,就是用来部分解决这个问题的。 只要将 new 运算符返回的指针 p 交给一个 shared_ptr 对象“托管”,就不必担心...