shared_ptr 代表的是共享所有权,shared_ptr 是支持复制的和赋值以及移动的 (2)资源消耗上 unique_ptr 在默认情况下和裸指针的大小是一样的。 所以 内存上没有任何的额外消耗,性能是最优的,我们大多数场景下用到的应该都是 unique_ptr。 shared_ptr 的内存占用是裸指针的两倍。因为除了要管理一个裸指针外,还要...
1. auto_ptr: c++11中推荐不使用他(放弃) 2.shared_ptr:拥有共享对象所有权语义的智能指针 3.unique_ptr:拥有独有对象所有权语义的智能指针 4.weaked_ptr:到std::shared_ptr所管理对象的弱引用 1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr是通过指针保持对...
shared_ptr<int>p4(newint(1024)); //shared_ptr<int> p5 = new int(1024); // wrong, no implicit constructor cout<<*p4<<endl; 但是,不能将一个new表达式返回的指针赋值给shared_ptr。 另外,特别需要注意的是,不要混用new和shared_ptr! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 voidproces...
unique_ptr<Test> p2(p1.release());//将p1置为空,p2指向了原来p1指向的对象 unique_ptr<Test> p3(new Test(3)); p2.reset(p3.release());//先释放了p2所指向的内存,让p2指向了原来p3指向的对象,p3被置为空 p2.release();//错误,p2不会释放内存,而且丢失了能够释放内存的指针 auto p = p2....
由上述的类模板可以生成三种类型的智能指针实例。这三种智能指针实例的区别在于,管理原始指针的方式不一样。 shared_ptr允许多个指针指向同一个变量。 unique_ptr则独占所指向的变量。 weak_ptr则指向shared_ptr所管理的变量。 2.智能指针的基础用法 1.智能指针的初始化 ...
智能指针 C++11 引入了 3 个智能指针类型: std::unique_ptr<T> :独占资源所有权的指针。 std::shared_ptr<T> :共享资源所有权的指针。 std::weak_ptr<T> :共享资源的观察者,需要和 std::shared_ptr 一起使用,不影响资源的生命周期。 std::auto_ptr 已被废弃。
(2) unique_ptr unique_ptr采用的是独享所有权语义,一个非空的unique_ptr总是拥有它所指向的资源。转移一个 unique_ptr将会把所有权全部从源指针转移给目标指针,源指针被置空;所以unique_ptr不支持普通的拷贝和赋值操作,不能用在STL标准容器中;局部变量的返回值除外(因为编译器知道要返回的对象将要被销毁);如果...
shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 make_shared的标准库函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。与智能指针一样,ma...
这一篇简单说说如何使用智能指针。 一,智能指针分3类:今天只唠唠shared_ptr shared_ptr unique_ptr weak_ptr 二,下表是shared_ptr和unique_ptr都支持的操作 上面操作的验证代码 #include<memory>#include<iostream>#include<vector>using namespacestd;classTest{public: ...
引用和指针的区别 Cpp新特性知道哪些 类型转换 RAII基于什么实现的(生命周期、作用域、构造析构 手撕:Unique_ptr,控制权转移(移动语义) 手撕:类继承,堆栈上分别代码实现多态 unique_ptr和shared_ptr区别 右值引用 函数参数可不可以传右值 参考c/c++堆栈实现自己的堆栈。要求:不能用stl容器。 stl容器了解吗?底层如何...