→ Caesar08: 1. 例如你的object不需被動態創造出來(所以不會用smart 04/27 10:10
→ Caesar08: pointer),又需要被別的object操作時,但又需要放在co 04/27 10:10
→ Caesar08: ntainer時 04/27 10:10
哦哦原來如此!!
因為reference不是object
所以想放在container內,又不想佔據太多記憶體的話
這時候就會使用到built-in pointer了!
了解!!: )
→ Caesar08: 2. 當你需要動態創造object,又想要把他當成一般object 04/27 10:11
→ Caesar08: 使用時(所以不需自己delete) 04/27 10:11
推 Frozenmouse: unique ptr 就我之前看是為了保證只有一個地方有該指 04/27 10:14
→ Frozenmouse: 標的生殺大權 04/27 10:14
對啊,就是這個應用的點不知道多不多
所以才想問看看她會不會常使用到
→ Caesar08: 3. 看不懂。4. 沒問題 04/27 10:14
3的問題就是說,比如說我們現在要一個pointer指向一個動態宣告出來的陣列
是使用:
(a): int *a = new int[13];
(b): shared_ptr<vector<int>> a = make_shared<vector<int>>(13);
哪個比較符合modern c++ style這樣~
※ 編輯: flere (1.168.143.106), 04/27/2016 10:23:45
→ Caesar08: 你的a與b是不同意思,不能拿來比較。 04/27 10:30
→ Caesar08: 還有,動態陣列用vector就好,沒必要用shared_ptr 04/27 10:30
啊!!!
好有道理啊!!!
看來是我誤會書中的意思了
一般使用動態陣列
應該如同Caesar08板友說的使用vector
而不是要我使用shared_ptr指向一個vector!
而shared_ptr指向一個vector,
應該是應用在,多個object要共享同樣的資料的時候
希望我的理解沒有錯> <!
謝謝各位板友!!!: )
※ 編輯: flere (1.168.143.106), 04/27/2016 10:51:35
→ Caesar08: shared_ptr主要是拿來解決共用的問題,而不是記憶體浪費 04/27 10:55
→ Caesar08: ... 04/27 10:55
好的> <
我把上面那一行砍掉以免誤導別人XD
共用才是最重要的目的
記憶體使用量變少只是剛好出現的一個現象,不應該被我當成使用shared_ptr的目的!
真的太謝謝你了!!!
讓我多瞭解了很多!!!
※ 編輯: flere (1.168.143.106), 04/27/2016 11:10:14
→ Frozenmouse: 太到例子(′・ω・`) 04/27 10:58
推 Frozenmouse: 不過大致上就是像前面說的,不用自己delete,它會直 04/27 11:01
→ Frozenmouse: 接跟那個unique_ptr的生命週期 04/27 11:01
推 Frozenmouse: 有個應用例是丟例外的時候,純指標還要另外想辦法手 04/27 11:12
→ Frozenmouse: 動釋放,而用unique_ptr則不用擔心這點 04/27 11:12
有道理,這個書裡面也有提到
不過我剛剛嘗試了一下,shared_ptr也可以做到這一點XD
所以這應該不是unique_ptr的專利
感覺應該就像Caesar08還有你說的一樣
就是想當個一般的物件使用,又不想自己delete這樣~
謝謝你~~~
※ 編輯: flere (1.168.143.106), 04/27/2016 11:21:37
→ Jockey66666: 當你不需要copy的時候都用unique_ptr 04/27 14:12
推 CoNsTaR: 如果你真的很想把 Ref 裝進 STL 容器可以用 std::referen 04/27 17:17
→ CoNsTaR: ce_wrapper 04/27 17:17
→ CoNsTaR: 不過我也還沒去研究過 reference_wrapper 的實作 還不知 04/27 17:18
→ CoNsTaR: 道用指標和 reference_wrapper 的優缺點 04/27 17:18
→ CoNsTaR: 剛剛看了一下,std::reference_wrapper 內部也是直接儲存 04/27 17:28
→ CoNsTaR: 指標 04/27 17:28
→ firose: unique_ptr 很輕 就像一個 native ptr 一樣 04/27 17:28
推 Frozenmouse: 的確,不需copy的話unique_ptr的語義應該比較適合 04/27 18:35
→ Frozenmouse: shard_ptr就是要拿來分享啊,不然要幹嘛(? 04/27 18:36
→ Frozenmouse: *shared 04/27 18:36
→ Caesar08: 拿來做atomic operation... 04/27 21:24
推 Littlechozy: 做pimpl的時候要用unique_ptr 04/27 22:10
推 legendmtg: unique_ptr 最常用的場合就pimpl idiom 04/27 22:12
→ flere: 還沒碰過這個> <我會好好記起來的!! 04/28 06:12
→ flere: 真的是謝謝大家: ))) 04/28 06:12