前言:
- 使用 普通指针/其他已存在的智能指针/其他已存在的普通指针,对当前创建的智能指针进行初始化。 (创建 指针 指向当前已有内存)
- 使用 make_shared 创建全新的内存区,然后创建一个全新的智能指针指向它。 (创建 内存空间 和 指针)
- 使用 智能指针的 reset 方法来进行 智能指针的 重定向 和 释放。 (重定向 和 销毁)
std::shared_ptr - cppreference.com
std::unique_ptr - cppreference.com
智能指针
智能指针有两种: shared_ptr 和 unique_ptr,这两种指针都是模板类,原型为 xxx_ptr<T>
(!)注:智能指针是用来管理堆内存的,不是作为指针使用的。
(!)智能指针是使用delete来释放内存,所以释放内存时的特性和delete一样。
int i = 100; //或者其他类,比如 classA a;
shared_ptr<int> sp = make_shared<int>(i);
上述语句实际上是使用i的值作为新分配内存的初始值。sp并没有指向i,而是指向了新分配的堆,这个堆存放int型的数值100。上述语句不能算错误,但是需要理解 make_shared 动作实际上是取堆里申请了内存的。
可以这样理解,make_shared 相当于 new ,尖括号指定需要分配内存的类型名,小括号指定作为拷贝构造传递给类型名的值,如果不指定,那么使用类型的默认构造。
classA *pa = new classA();
shared_ptr<classA> sp = make_shred<classA>(*pa)

本文介绍C++中智能指针shared_ptr、unique_ptr和weak_ptr的基本用法及注意事项,包括使用make_shared创建对象、计数器原理、weak_ptr的作用及如何避免悬空指针。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



