PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 交互friend以及智能指針的問題
作者:
Caesar08
(Caesar)
2014-06-08 20:13:17
問題(Question):
第一個問題
http://ideone.com/VhOgRi
我想讓兩個class的constructor互相為friend
但我不想使用我註解起來的地方
第二個問題
比較這兩份code
http://ideone.com/3JPtDg
http://ideone.com/ylRrpl
為什麼shared_ptr能做得到呢?
(主要原因是因為我的code是用pimpl去寫的,後來要改成unique_ptr時就發現錯誤了)
作者:
Jockey66666
(往事已成追憶)
2014-06-08 20:27:00
unique_ptr在compile time需要知道destructor定義
http://en.cppreference.com/w/cpp/memory/unique_ptr
作者:
Caesar08
(Caesar)
2014-06-08 20:43:00
我看完了,可是我沒辦法理解,為什麼他需要deleter?我到是找到了這個,
http://ppt.cc/l8h~
作者:
Jockey66666
(往事已成追憶)
2014-06-08 21:32:00
可參考
http://ppt.cc/73gO
的寫法
作者: firose (guest也是也是也是也是也)
2014-06-09 11:14:00
連結只說跟 dynamic/static deleter 差異有關 也不是很清楚
作者:
Caesar08
(Caesar)
2014-06-09 21:19:00
感謝firose,不過文章好長= =...
作者: firose (guest也是也是也是也是也)
2014-06-09 22:46:00
其實我後來看還是不太懂, 結果又研究了一下, 有些想法:主要是這兩個類別的 ctor、dtor 實作不太一樣, shared_ptr無參數建構子不做事, 只把一個參用計數的指標出使為 0它是 sp_counted_base, 然後解構子呼叫它的 release 這個函數, 不會依賴 T 所以不對它要求 complete typeunique_ptr 的 dtor 會去呼叫 default-deleter上面 J 大貼的連結中有說明 delete 一個沒有 dtor 的型別會編譯過關, 但是會有 undefined behavior 所以它的實作用sizeof 來達到編譯錯誤, 提醒使用者不能有 incomplete type那連結也指出如果呼叫 shared_ptr(T*) 這個版本會需要完整定義, 但是我們沒呼叫這版本, 而根據 template 特性, 沒呼叫到就不會具現化, 所以沒有問題剩下問題就是為什麼 unique_ptr 的解構式會被需要? 上面討論的論壇聯結都有說到
作者:
Jockey66666
(往事已成追憶)
2014-06-09 23:58:00
針對dynamic/static deleter給一個小小例子
http://ideone.com/egf9ip
unique_ptr 版本
http://ideone.com/sF0qB5
shared_ptr版本我destructor刻意不加上virtual可是shared_ptr會呼叫到derived,這就是dynamic結論:能用unique_ptr就盡量用unique_ptr比較有效率 :)
繼續閱讀
[問題] C++/CLI 事件如何傳參數給事件?
deo2000
[問題] BCB程式問題
archer123
[問題] 請問為什麼我這樣程式會當掉
ga544523
[問題] C++運算子重載和繼承合用,會導致混亂
frankhsu421
[問題] 關於CRecordset::GetFieldValue問題
klyhate
[問題] 是否執行上次成功專案?
discipile
[問題] 刪除字串特定符號
hyhjcjy
[問題] mfc CDialog影響socket (udp)接收
kaijajan
[問題] 裝置管理員
getaway
[問題] 如何在BCB操控Excel(非使用OLE方式)?
bluestar8783
Links
booklink
Contact Us: admin [ a t ] ucptt.com