c 智慧型指標複習筆記

2021-09-26 09:41:42 字數 1425 閱讀 4131

/*******shared_ptr:變數出了作用域之後智慧型指標會析構,引用計數-1,直到為0時銷毀物件,呼叫物件的析構函式,哪怕是出現了異常。*****/

/*******weak_ptr解決迴圈引用問題*******/

/*******unique_ptr它不允許其他的智慧型指標共享其內部的指標,不允許通過賦值將乙個unique_ptr賦值給另乙個unique_ptr*/

以shared_ptr為例:

class test

; ~test() ;

string getid() const

void setid(string x)

private:

string m_x;

};

class thistest : public enable_shared_from_this

private:

};int main()

cout << "s_ptr1 : " << s_ptr1.use_count() << " "<< (*s_ptr1).getid().c_str() << endl; //2 d

} //shared_ptrs_ptr4;

//swap(s_ptr4, s_ptr2);

cout << "s_ptr1 : " << s_ptr1.use_count() << " "<< (*s_ptr1).getid().c_str() << endl; //1 d

test *pp = s_ptr1.get();

if (pp)

delete pp; //獲取原始指標後不能釋放,如果釋放會出錯。

//不要用乙個原始的指標初始化多個shared_ptr

//想用this指標時,利用std::enable_shared_from_this,然後使用shared_from_this()構造shared_ptr。

shared_ptrpt1(new thistest());

shared_ptrpt2 = pt1->f(); // pt2是由pt1的this構造共享智慧型指標

std::cout << pt1.use_count() << " " << pt2.use_count() << std::endl; // 2 2

shared_ptrpt3(new thistest());

shared_ptrpt4 = pt3->f();

std::cout << pt1.use_count() << " " << pt2.use_count() << " "

<< pt3.use_count() << " " << pt4.use_count() << std::endl; // 2 2 2 2

system("pause");

return 0;

}

C 複習之智慧型指標

複習智慧型指標時正好看到new的最基本用法 內建的new操作符,經常使用的t ptr new t 分配記憶體,呼叫建構函式 呼叫operator new分配記憶體,operator new sizeof a 呼叫建構函式生成類物件,a a 呼叫placement new 返回相應指標 事實上,分配記...

智慧型指標筆記

前言智慧型指標是行為類似於指標的類物件。include include using namespace std void fun string str int main system pause return0 void fun string str 可以看出此 中有缺陷,在fun函式中,分配了堆中...

C 智慧型指標學習筆記

原文 摘錄智慧型指標 auto ptr,unique ptr,shared ptr,weak ptr 智慧型指標的作用是管理乙個指標,因為存在一下的情況 申請的空間再函式結束時忘記釋放,造成記憶體洩漏。使用智慧型指標可以很大程度上的避免這個問題,因為智慧型指標是乙個類,當超出了類的例項物件的作用域時...