IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 17 C++ 高级之智能指针 -> 正文阅读

[移动开发]17 C++ 高级之智能指针

Android Ndk 学习笔记(目录)

#include <iostream>
#include <memory> // 智能指针的头文件引入
using namespace std;



class Person{
public:
    ~Person(){
        cout << "Person  析构函数" <<endl ;
    }
};

// 智能指针
void usePerson(){


    Person * person1 = new Person(); // 堆中开辟的空间
    Person * person2 = new Person();

    // 栈区开辟sharedPtr1,main函数弹栈时,自动弹栈,弹栈时将会person也释放了
    shared_ptr<Person> sharedPtr1(person1);
    shared_ptr<Person> sharedPtr2(person2);
};

class Person2; // 先声明 Person2 让我们的Person1 直接找到

class Person1 {
public:
    shared_ptr<Person2> person2; // Person2智能指针  shared_ptr 引用计数+1
    ~Person1() {
        cout << "Person1 析构函数" << endl;
    }
};

class Person2 {
public:
    shared_ptr<Person1> person1;  // Person1智能指针  shared_ptr 引用计数+1
    ~Person2() {
        cout << "Person2 析构函数" << endl;
    }
};

void usePerson12(){
    Person1 * person1 = new Person1(); // 堆区开辟
    Person2 * person2 = new Person2(); // 堆区开辟

    shared_ptr<Person1> sharedPtr1(person1); // +1 = 1
    shared_ptr<Person2> sharedPtr2(person2); // +1 = 1

    cout << "前 sharedPtr1的引用计数是:" << sharedPtr1.use_count() << endl;
    cout << "前 sharedPtr2的引用计数是:" << sharedPtr2.use_count() << endl;

    // 给Person2智能指针赋值
    person1->person2 = sharedPtr2;
    // 给Person1智能指针赋值
    person2->person1 = sharedPtr1;

    cout << "后 sharedPtr1的引用计数是:" << sharedPtr1.use_count() << endl;
    cout << "后 sharedPtr2的引用计数是:" << sharedPtr2.use_count() << endl;
}

class Person4; // 先声明 Person2 让我们的Person1 直接找到

class Person3 {
public:
    weak_ptr<Person4> person4; // Person2智能指针  没有引用计数 无法+1
    ~Person3() {
        cout << "Person1 析构函数" << endl;
    }
};

class Person4 {
public:
    weak_ptr<Person3> person3;  // Person1智能指针  没有引用计数 无法+1
    ~Person4() {
        cout << "Person2 析构函数" << endl;
    }
};


void usePerson34(){

    Person3 * person3 = new Person3(); // 堆区开辟
    Person4 * person4 = new Person4(); // 堆区开辟

    shared_ptr<Person3> sharedPtr3(person3); // +1 = 1
    shared_ptr<Person4> sharedPtr4(person4); // +1 = 1

    cout << "前 sharedPtr3的引用计数是:" << sharedPtr3.use_count() << endl;
    cout << "前 sharedPtr4的引用计数是:" << sharedPtr4.use_count() << endl;

    // 给Person2智能指针赋值
    person3->person4 = sharedPtr4;
    // 给Person1智能指针赋值
    person4->person3 = sharedPtr3;

    cout << "后 sharedPtr1的引用计数是:" << sharedPtr3.use_count() << endl;
    cout << "后 sharedPtr2的引用计数是:" << sharedPtr4.use_count() << endl;


}
class Person5 {};

void usePerson5(){
    Person5 * person51 = new Person5();
    Person5 * person52 = new Person5();

    std::unique_ptr<Person5> uniquePtr5(person51);
    // std::unique_ptr<Person> uniquePtr6 = uniquePtr5;  unique不允许,因为是独占的

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章           查看所有文章
加:2021-08-03 11:19:29  更:2021-08-03 11:22:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 22:32:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码