[問題] smart pointer的一些疑問
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);
問題很多> <
謝謝大家!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.143.106
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1461722636.A.8AC.html
→
04/27 10:10, , 1F
04/27 10:10, 1F
→
04/27 10:10, , 2F
04/27 10:10, 2F
→
04/27 10:10, , 3F
04/27 10:10, 3F
哦哦原來如此!!
因為reference不是object
所以想放在container內,又不想佔據太多記憶體的話
這時候就會使用到built-in pointer了!
了解!!: )
→
04/27 10:11, , 4F
04/27 10:11, 4F
→
04/27 10:11, , 5F
04/27 10:11, 5F
推
04/27 10:14, , 6F
04/27 10:14, 6F
→
04/27 10:14, , 7F
04/27 10:14, 7F
對啊,就是這個應用的點不知道多不多
所以才想問看看她會不會常使用到
→
04/27 10:14, , 8F
04/27 10:14, 8F
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
→
04/27 10:30, , 9F
04/27 10:30, 9F
→
04/27 10:30, , 10F
04/27 10:30, 10F
啊!!!
好有道理啊!!!
看來是我誤會書中的意思了
一般使用動態陣列
應該如同Caesar08板友說的使用vector
而不是要我使用shared_ptr指向一個vector!
而shared_ptr指向一個vector,
應該是應用在,多個object要共享同樣的資料的時候
希望我的理解沒有錯> <!
謝謝各位板友!!!: )
※ 編輯: flere (1.168.143.106), 04/27/2016 10:51:35
→
04/27 10:55, , 11F
04/27 10:55, 11F
→
04/27 10:55, , 12F
04/27 10:55, 12F
好的> <
我把上面那一行砍掉以免誤導別人XD
共用才是最重要的目的
記憶體使用量變少只是剛好出現的一個現象,不應該被我當成使用shared_ptr的目的!
真的太謝謝你了!!!
讓我多瞭解了很多!!!
※ 編輯: flere (1.168.143.106), 04/27/2016 11:10:14
推
04/27 10:58, , 13F
04/27 10:58, 13F
→
04/27 10:58, , 14F
04/27 10:58, 14F
推
04/27 11:01, , 15F
04/27 11:01, 15F
→
04/27 11:01, , 16F
04/27 11:01, 16F
推
04/27 11:12, , 17F
04/27 11:12, 17F
→
04/27 11:12, , 18F
04/27 11:12, 18F
有道理,這個書裡面也有提到
不過我剛剛嘗試了一下,shared_ptr也可以做到這一點XD
所以這應該不是unique_ptr的專利
感覺應該就像Caesar08還有你說的一樣
就是想當個一般的物件使用,又不想自己delete這樣~
謝謝你~~~
※ 編輯: flere (1.168.143.106), 04/27/2016 11:21:37
→
04/27 14:12, , 19F
04/27 14:12, 19F
推
04/27 17:17, , 20F
04/27 17:17, 20F
→
04/27 17:17, , 21F
04/27 17:17, 21F
→
04/27 17:18, , 22F
04/27 17:18, 22F
→
04/27 17:18, , 23F
04/27 17:18, 23F
→
04/27 17:28, , 24F
04/27 17:28, 24F
→
04/27 17:28, , 25F
04/27 17:28, 25F
→
04/27 17:28, , 26F
04/27 17:28, 26F
推
04/27 18:35, , 27F
04/27 18:35, 27F
→
04/27 18:36, , 28F
04/27 18:36, 28F
→
04/27 18:36, , 29F
04/27 18:36, 29F
→
04/27 21:24, , 30F
04/27 21:24, 30F
推
04/27 22:10, , 31F
04/27 22:10, 31F
→
04/27 22:11, , 32F
04/27 22:11, 32F
推
04/27 22:12, , 33F
04/27 22:12, 33F
→
04/28 06:12, , 34F
04/28 06:12, 34F
→
04/28 06:12, , 35F
04/28 06:12, 35F