[問題] smart pointer的一些疑問

作者: flere (人間失格)   2016-04-27 10:03:41
hi~
最近學了C++的smart pointer
學習內容為:
C++ primer 5th, chapter 12
版上的一部影片以及一些文章
有些疑問想跟大家請教與討論!
(與C++交往不夠深,有蠢問題的話請見諒> <)
1.
既然我們有smart pointer可以用
那還會有什麼情況
是"一定必須"要使用built-in pointer的呢?
我指的是一般應用程式開發,而不是到語言很底層的地方
因為我想smart pointer這個物件裡應該也是使用built-in poiner對吧?
以現代C++使用者的角度來看
是否應盡量避免使用built-in pointer?
2.
對於unique_ptr的使用時機超級不了解!!
這到底應該什麼時候使用呀??
3.
chapter 12.2是在講dynamic array
有提到說,我們應該盡量使用library container
盡量不要dynamic allocate array
但他是說"大部份的應用"
有什麼情況是使用dynamic allocate array會比較好的嗎?
4.
使用shared_ptr來產生2維陣列的方式
我底下這樣做可以順利執行
但我不確定是不是 好/正確 的方法
比如說我要產生一個3*4的2維陣列:
auto p = make_shared<vector<vector<int>>>();
p->resize(3);
for(auto &x : *p)
x.resize(4);
問題很多> <
謝謝大家!!
作者: Caesar08 (Caesar)   2016-04-27 10:10:00
1. 例如你的object不需被動態創造出來(所以不會用smartpointer),又需要被別的object操作時,但又需要放在container時2. 當你需要動態創造object,又想要把他當成一般object使用時(所以不需自己delete)
作者: Frozenmouse (*冰之鼠*)   2016-04-27 10:14:00
unique ptr 就我之前看是為了保證只有一個地方有該指標的生殺大權
作者: Caesar08 (Caesar)   2016-04-27 10:14:00
3. 看不懂。4. 沒問題你的a與b是不同意思,不能拿來比較。還有,動態陣列用vector就好,沒必要用shared_ptrshared_ptr主要是拿來解決共用的問題,而不是記憶體浪費...
作者: Frozenmouse (*冰之鼠*)   2016-04-27 10:58:00
http://goo.gl/dQlwSl 底下的 Notes 部份,一時想不太到例子(′・ω・`)不過大致上就是像前面說的,不用自己delete,它會直接跟那個unique_ptr的生命週期有個應用例是丟例外的時候,純指標還要另外想辦法手動釋放,而用unique_ptr則不用擔心這點
作者: Jockey66666 (往事已成追憶)   2016-04-27 14:12:00
當你不需要copy的時候都用unique_ptr
作者: CoNsTaR ((const *))   2016-04-27 17:17:00
如果你真的很想把 Ref 裝進 STL 容器可以用 std::reference_wrapper不過我也還沒去研究過 reference_wrapper 的實作 還不知道用指標和 reference_wrapper 的優缺點剛剛看了一下,std::reference_wrapper 內部也是直接儲存指標
作者: firose (guest也是也是也是也是也)   2016-04-27 17:28:00
unique_ptr 很輕 就像一個 native ptr 一樣
作者: Frozenmouse (*冰之鼠*)   2016-04-27 18:35:00
的確,不需copy的話unique_ptr的語義應該比較適合shard_ptr就是要拿來分享啊,不然要幹嘛(?*shared
作者: Caesar08 (Caesar)   2016-04-27 21:24:00
拿來做atomic operation...
作者: Littlechozy (キミに100%)   2016-04-27 22:10:00
做pimpl的時候要用unique_ptr可參考http://stackoverflow.com/questions/5576922
作者: legendmtg (CLANNAD)   2016-04-27 22:12:00
unique_ptr 最常用的場合就pimpl idiom
作者: flere (人間失格)   2016-04-28 06:12:00
還沒碰過這個> <我會好好記起來的!!真的是謝謝大家: )))

Links booklink

Contact Us: admin [ a t ] ucptt.com