1.address-of操作(取址)
我們可以使用指向指標的指標,這需要對指標取址,我們很容易把同樣的想法加在智慧型指標上,但是,使用智慧型指標的目的是管理指標,直接暴露給外界底層的指標一定不是什麼好事,而且,定義了取址操作的型別幾乎不可能被使用於范型程式設計。
從這個意義上來說,遠離address-of操作是個不錯的選擇。
2.隱式轉換(implicit conversion)至原始指標
被傳遞的隱式轉換的指標同樣超出了智慧型指標的管理範圍,不可預料的事情一樣可能發生。而且,乙個極端的情況是使用者delete智慧型指標操作的時候,因為隱式轉換的存在,在智慧型指標管理範圍之外已經被刪除了指標,這是和設計使用智慧型指標的初衷背道而馳的。
僅僅為了避免delete,可以定義void*的轉換,造成delete歧義。但是,這個問題的更好解決方案是使用顯示方法獲取底層指標(顯示轉換)。這樣做的好處是,你要做超出智慧型指標管理許可權的事情,但是,白紙黑字,你的**保證這是你可以如此做的。
隱式轉換和顯示轉換的歷史也告訴我們,顯示要安全一些。
3.相等性(equality)和不等性(inequality)
為了支援相等性和不等性的測試,傳遞成為底層指標的測試是個不錯的想法,但是這樣有各種各樣的問題,暴力定義各個操作是個不錯的選擇,儘管複雜煩瑣,但是這保證了程式正確的行為,這是值得的,而且我們還有template技術的支援,不會有太多的**,試想一下loki_typelist_50你就知道你沒做多少工作了。
對每種判斷情況定義判斷操作函式,friend化保證可以訪問到底層資料,是實現這些方法的手段。唯一乙個無法解決的問題是if(sp)...測試,但是你可以使用if(!!sp)...替代。可以有手段支援到if(sp)...,但是不安全。
c 智慧型指標的問題 智慧型指標初探(一)
為什麼要有智慧型指標 在c 中,動態記憶體的管理一般是用一對運算子完成的 new和delete。new 在動態記憶體中為物件分配一塊空間並返回乙個指向該物件的指標。delete 指向乙個動態獨享的指標,銷毀物件,並釋放與之關聯的記憶體。使用new和delete動態記憶體管理經常會出現問題 忘記釋放記...
C 智慧型指標的問題
如何回答c 面試中關於智慧型指標的問題?1 什麼是智慧型指標?2 分析下常見的智慧型指標有哪些?3 實現乙個智慧型指標唄?沒具體說寫哪個,建議預設寫 unique ptr 1 答 智慧型指標 smart pointer 是儲存指向動態分配 堆 物件指標的類,用於生存期控制,能夠確保自動正確的銷毀動態...
幾個問題的
1.寫乙個函式返回引數二進位制中 1 的個數 比如 15 0000 1111 4 個 1 程式原型 int count one bits unsigned int value 解 無符號整型為32位,所以利用迴圈32次,逐個判斷二進位制每一位是不是1 int count one bits unsig...