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不允許,因為是獨占的
}