【C++】share
一、share_ptr 的简单使用
1.1、基本用法
从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针。
智能指针的作用是防止忘记调用delete释放内存和程序异常的进入catch块忘记释放内存。另外指针的释放时机也是非常有考究的,多次释放同一个指针会造成程序崩溃,这些都可以通过智能指针来解决。
智能指针的行为类似于一个常规指针,与常规指针之间重要的区别就是它负责自动释放所管理的资源,share_ptr 使用引用计数,允许多个 share_ptr 指向同一资源,每多一个 share_ptr 指向该资源,share_ptr 的引用计数就 +1 ,减为0时表示没有 share_ptr 对该资源进行引用了,就会释放所指向的资源。share_ptr 内部中的引用计数是线程安全的,但是引用的资源不是线程安全的。
1.2、初始化
- 裸指针直接初始化,但不能通过隐式转换来构造,因为 share_ptr 构造函数被声明为 explicit
- 允许移动构造与拷贝构造
- 通过 make_share 构造
#include #include class test {}; int main() { std::shared_ptr f(new test()); // 裸指针直接初始化 //std::shared_ptr f1 = new test(); // Error,explicit禁止隐式初始化 std::shared_ptr f2(f); // 拷贝构造函数 std::shared_ptr f3 = f; // 拷贝构造函数 f2 = f; // copy赋值运算符重载 std::cout
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。