/*******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 智慧型指標的作用是管理乙個指標,因為存在一下的情況 申請的空間再函式結束時忘記釋放,造成記憶體洩漏。使用智慧型指標可以很大程度上的避免這個問題,因為智慧型指標是乙個類,當超出了類的例項物件的作用域時...