C 智慧型指標原理

2021-07-05 01:37:30 字數 1488 閱讀 2673

智慧型指標(smart pointer)是儲存指向動態分配(堆)物件指標的類,用於生存期控制,能夠確保自動正確的銷毀動態分配的物件,防止記憶體洩露。它的一種通用實現技術是使用引用計數(reference count)。智慧型指標類將乙個計數器與類指向的物件相關聯,引用計數跟蹤該類有多少個物件共享同一指標。每次建立類的新物件時,初始化指標並將引用計數置為1;當物件作為另一物件的副本而建立時,拷貝建構函式拷貝指標並增加與之相應的引用計數;對乙個物件進行賦值時,賦值操作符減少左運算元所指物件的引用計數(如果引用計數為減至0,則刪除物件),並增加右運算元所指物件的引用計數;呼叫析構函式時,建構函式減少引用計數(如果引用計數減至0,則刪除基礎物件)。

智慧型指標就是模擬指標動作的類。所有的智慧型指標都會過載 -> 和 * 操作符。智慧型指標還有許多其他功能,比較有用的是自動銷毀。這主要是利用棧物件的有限作用域以及臨時物件(有限作用域實現)析構函式釋放記憶體。當然,智慧型指標還不止這些,還包括複製時可以修改源物件等。智慧型指標根據需求不同,設計也不同(寫時複製,賦值即釋放物件擁有許可權、引用計數等,控制權轉移等)。

#includeusing namespace std;

template class smartpointer

//拷貝建構函式

smartpointer(const smartpointer& src)

} //過載賦值操作符

smartpointer& operator=(const smartpointer& src)

releasecount();

_ptr = src._ptr;

_reference_count = src._reference_count;

(*_reference_count)++;

return *this;

} //過載操作符

t& operator*()

//throw exception

} //過載操作符

t* operator->()

//throw exception

} //析構函式

~smartpointer()

} private:

t *_ptr;

size_t *_reference_count;

void releasecount()

} }

};

int main()

{ smartpointercp1(new char('a'));

smartpointercp2(cp1);

smartpointercp3;

cp3 = cp2;

cp3 = cp1;

cp3 = cp3;

smartpointercp4(new char('b'));

cp3 = cp4;

cout<<*cp3<<" "<<*cp4<

C 智慧型指標原理

1.c 智慧型指標 2.c 智慧型指標簡單剖析 3.智慧型指標 auto ptr 詳解 4.c 智慧型指標詳解 5.請你介紹一下c 的智慧型指標 牛客網 在c 程式裡,使用new關鍵字開闢的記憶體必須被手動delete掉,不然就會導致記憶體的洩漏,但是,當程式非常冗長,你能保證自己每乙個手動開闢的記...

C 智慧型指標及其原理

智慧型指標介紹 智慧型指標 raii 是利用物件的生命週期來管理資源的技術。raii,resource acquisition is initialization 顧名思義,就是在初始化物件的時候獲取資源,在這個物件進行析構時會幫我們釋放資源,這樣做的好處有很多 不需要顯示的釋放資源 可以避免因為沒...

智慧型指標原理及C 實現

智慧型指標是乙個類,在類的建構函式中傳入乙個普通指標,析構函式釋放指標。引入智慧型指標是為了更好的管理記憶體,防止記憶體洩漏等問題。實現方法 採用引用計數的方法。智慧型指標將乙個計數器與類指向的物件相關聯,引用計數跟蹤共有多少個類物件共享同一指標。其遵循以下規則 1 每次建立類的新物件時,初始化指標...