作者MashiroKinji (MashiroKinji)
看板C_and_CPP
標題[問題] smart pointer 新手的小小問題
時間Sat Feb 28 05:23:51 2015
既上次向各位前輩討教關於的問題
https://www.ptt.cc/bbs/C_and_CPP/M.1424809447.A.FBD.html
小弟開始決定使用智能指標
想請問一下使用智能指標跑for的時候
std::vector<std::unique_ptr<MyClass>> vector;
for (int i = 0; i < 10;i++)
{
std::unique_ptr<MyClass> temp(new MyClass(i));
vector.push_back(std::move(temp));
}
//-----
(1)
for (std::vector<std::unique_ptr<MyClass>>::iterator i = vector.begin(); i
!= vector.end(); i++)
{
i->get()->Print();
}
(2)
for (int i = 0; i < vector.size(); i++)
{
vector[i]->Print();
}
//-----
vector.clear();
想請問一下(1),(2)哪個做法會比較好呢?
感覺(1)的方法超長的看得好辛苦...
(2)的話又感覺不是很專業!?
另外同樣的功能用傳統的指標去做整體程式碼就看起來很簡潔
而且在push_back的時候還可以
vector.push_back(new MyClass(i));
比起要創建一個unique_ptr然後再用move傳送
感覺還要快好多
是不是在使用智能指標後就要有著和使用Java的垃圾回收機制
一定要有著效能降低的準備??
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 121.254.69.174
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1425072234.A.422.html
推 LPH66: 都用 C++11 了就用 range-based for 吧 02/28 05:45
→ Caesar08: 能的話就用for_each,不行才考慮for loop 02/28 05:54
→ MashiroKinji: 怎麼覺得我學得越來越不像C++了= = 02/28 06:14
→ MashiroKinji: 課本的for(;;),陣列,指標都不用了... 02/28 06:15
→ MashiroKinji: 是說for(;;)和for(:) for(:)有比較快嗎? 02/28 06:32
→ azureblaze: auto i = vector.begin(); 02/28 09:30
推 bibo9901: (1)和(2)應該是一樣的 02/28 11:14
→ bibo9901: 再來可以用 emplace_back 來代替 move + push_back 02/28 11:14
→ bibo9901: 最後智能指標只是避免你忘記手動 delete 的包裝 02/28 11:16
→ bibo9901: 並沒有像 java gc 那麼強大...所以也沒有多少 overhead 02/28 11:23
→ uranusjr: 真的, 請愛用 auto 和 for_each 02/28 12:48
→ uranusjr: for(:) 也是個方法 02/28 12:49
→ NilPtr: 我看書上說for(:)編譯過後其實是用iterator的普通for loop 02/28 15:32
→ kikiqqp: 程式是寫給"人"看的,編譯器才不管啥奇淫技巧 02/28 23:17
→ kikiqqp: for(;;)變成組語後大多一樣啦 02/28 23:17
推 suhorng: 記得還有不推薦把 new 跟智能指標建構分開 02/28 23:24
→ suhorng: make_[unique|shared] 除了記憶體連續 也處理例外比較好 02/28 23:25