#include<memory>voidmanageResource(std::unique_ptr<int>ptr){// 使用资源}// ptr在此处自动销毁,资源被释放intmain(){autoptr=std::make_unique<int>(42);// 创建并初始化unique_ptrmanageResource(std::move(ptr));// 移动所有权到函数内// ptr现在为空,资源已在manageResource内部被释放return0;} s...
std::shared_ptrmay be used with an incomplete typeT. However, the constructor from a raw pointer (template shared_ptr(Y)) and the templatevoid reset(Y) member function may only be called with a pointer to a complete type (note that std::unique_ptr may be constructed from a raw pointer...
unique_ptr具有->和*运算符重载符,因此它可以像普通指针一样使用。 #include<iostream>#include<memory>usingnamespacestd;structTask{intmId;Task(intid):mId(id){cout<<"Task::Constructor"<<endl;}~Task(){cout<<"Task::Destructor"<<endl;}};intmain(){// 通过原始指针创建 unique_ptr 实例//shared_...
voidrunGame(){std::shared_ptr<Monster>monster1(newMonster());//计数加到1do{std::shared_ptr<Monster> monster2 = monster1;//计数加到2}while(0);//该栈退出后,计数减为1,monster1指向的堆对象仍存在std::shared_ptr<Monster> monster3 = monster1;//计数加到2}//该栈退出后,shared_ptr都释放...
三种智能指针 shared_ptr,unique_ptr,weak_ptr; 将shared_ptr存放在一个容器中,不再需要它的时候,要erase掉。 allocator负责封装堆内存管理的对象,它们在整个标准库中使用,特别是STL容器使用它们来管理容器内部的所有内存分配,大部份情况下,程序员不用理会,标准容器使用默认的分配器称为std :: allocator。
3.unique_ptr 什么时候用:当一个东西(比如一顶帽子)在同一时间只属于一个人。如果这个人不再需要它...
std::unique_ptr<Student> unque_p2(std::move(unique_p)); // 移动构造可以,让unique_p为空2.shared_ptr: 内存由多个指针变量共同使用,共同拥有内存的所有权,但是必须杜绝循环拷贝!并且shared_ptr 需要维护的信息有两部分:指向共享资源的指针;引用计数等共享资源的控制信息——维护一个指向控制信息的指针。Stu...
1.unique_ptr特点 unique_ptr 是 C++ 11 提供的用于防止内存泄漏的智能指针中的一种实现,独享被管理对象指针所有权的智能指针。 unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中删除关联的原始指针。 unique_ptr具有->和*运算符重载符,因此它可以像普通指针一样使用。
~shared_ptr 销毁shared_ptr。 Typedef element_type 元素的类型。 weak_type 指向元素的弱指针的类型。 成员函数 get 获取拥有的资源的地址。 owner_before 如果此 shared_ptr 排在提供的指针之前(或小于该指针),则返回 true。 reset 替换拥有的资源。 swap 交换两个 shared_ptr 对象。 unique 测试拥有的资...
在c++ 98 里面只有一种智能指针,就是 std::auto_ptr,因为具有唯一所有权的特征,所以限制了它的使用范围,比如你无法在容器中使用它。而我们知道 stl 容器是值语义的,如果不能用智能指针管理的话,只有两种办法来使用。 一种是类似这样: std::vector<std::string> names; ...