[问题] 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