unique_ptr的實現原理


在C++11中有兩個智能指針類型來管理動態對象,share_ptr允許多個指針指向同一個對象,unique_ptr則“獨占”所指對象。

我們知道指針或引用在離開作用域時是不會進行析構的,但是類在離開作用域時會自動執行析構函數,所以我們可以用一個類來實現指針指針(unique_ptr本質上是一個類,只是可以像一個指針一樣使用)。因此我們可以通過析構函數調用delete去釋放資源。那么如何實現“獨占”呢?我們可以在類中把拷貝構造函數和拷貝賦值聲明為private,這樣就不可以對指針指向進行拷貝了,也就不能產生指向同一個對象的指針。

因為把拷貝構造函數和賦值操作符都聲明為delete或private,這樣每一個智能指針要指向一個對象時只能是指向一個新實例化的對象而不能通過“=”或者拷貝去指向前面已經創建了的對象,例如“unique<A> ptr=&aa”,這里調用了賦值操作符這是不可以的。

void use_factory(T arg)
{
	unique_ptr_ptr<Foo> p = factory(arg);
	Foo *ptr = new Foo(arg);
	
	//使用P
}//p離開了作用域,但它指向的內存會被釋放掉
 //ptr申請的內存沒有被釋放,造成了內存泄漏

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM