c++primer中文版第五版中關於unique_ptr 的 release 函數的描述是不是有矛盾?
02-07
求教:
這兩句話不是矛盾的么?
而我自己寫的例子中unique_ptr管理的動態數組在執行release操作後和前面的單個動態對象一樣,並沒有調用析構函數。。這好像並不符合上面第二張圖中畫紅線的部分所述那樣?還是說我理解錯了書上的話?
你的想法是對的,書上寫錯了:up.release() 應該是 up.reset() 。
對函數的行為有疑問可以參考類似 std::unique_ptr::release - cppreference.com 的網站。
p.s. 該書的新版本似乎已經修正了這個錯誤。至少 Google Books 里的版本已經是這樣了:
C++ Primer - Google Booksbooks.google.com一切以文檔為主。C++Primer問題很多的,畢竟是那個老頭教一幫年輕人去寫的。不過這些細節問題你都可以通過實驗和看文檔來解決。你需要從這本書學習的是C++的精神,如何寫出C++喜歡你寫的那種風格的程序,而不是把你想要的風格強行放進C++里。
第二個應該是reset吧
想到初中數學老師經常喜歡說的一句話:
不能迷信書本!要和書本比比高低!
關於智能指針的(幾乎)一切都在Effective Modern C++ 第四章,春節後上市
release是釋放所有權,reset才清理資源。書上是寫錯了。
C++primer 第五版有很多不正確或者說不準確的地方,例如
一旦給unique_ptr指定了刪除器,是不能創建空指針的,也沒有隻接受一個刪除器的構造函數,我用vs g++都試過,而網上的資料也清一色的以圖裡這個為準,但代碼演示部分乖乖使用了unique_ptr&
說的有點亂,不過提問者有這種鑽研精神很不錯。
(召喚 @vczh 輪子哥)推薦閱讀:
※如何從只會 C++ 語法的水平到達完成項目編寫軟體的水平?
※關於VS2015的報錯問題,?
※如何用c++寫一個簡單的計算器程序?
※應該如何熟悉GNU工具鏈?例如GCC/Makefile/GDB
※正在學c++但是越學越覺得自己還有好多東西不知道?
TAG:C |