- 主题:智能指针作为参数到底传引用还是直接传有定论没有?
不涉及所有权的借用场景应该直接用裸指针,或者对象引用。
传智能指针引用的场景…不好想
【 在 z16166 的大作中提到: 】
: 智能指针,就是顶多两个机器字长吧,
: shared_ptr有两个成员,一个引用计数,一个裸指针。
: unique_ptr就一个裸指针成员。
: ...................
--
FROM 114.249.235.*
智能指针是管理对象生存期的。至少需要 new 的地方,unique_ptr 应该尽量用,方便移动所有权。shared_ptr 是 unique_ptr 搞不定的无奈之举。
【 在 finlab 的大作中提到: 】
: 我很不喜欢智能指针。
:
: 自己包装了一个相当于 shared_ptr<vector<T>> 的容器类,到处用。
: ...................
--
FROM 114.249.235.*
不用智能指针自己调用delete析构太容易出错了,改用 unique_ptr 是百利而无一害的
【 在 finlab 的大作中提到: 】
: 不喜欢, 我宁愿直接用裸指针。
:
: 大多数情况下,谁拥有和管理对象,谁只是临时使用,都是很明白的。
: ...................
--
修改:milksea FROM 114.254.3.*
FROM 114.254.3.*
?
当然是智能指针方便省事啊
【 在 finlab 的大作中提到: 】
: 嗯, 大项目关键项目需要。
:
: 我自己写的小程序,怎么方便省事怎么来。
: ...................
--
FROM 114.254.3.*
unique_ptr 传值是移动。借用应该穿 p.get() 裸指针。
【 在 Madlee 的大作中提到: 】
: unique_ptr传值就挂了吧?传进去owner就转移了,等函数退出的时候就析构了,调用者啥都没有了。
: --
: FROM 101.228.96.*
--
FROM 114.254.3.*
可能部分人对智能指针的用法和原理理解有问题。
对于 unique_ptr,原理上,整个结构就只有裸指针,赋值传参都是移动语义,指令就是复制一个整数,析构函数的调用是编译期确定的。这是典型的零开销抽象。用法上,unique_ptr 仅是负责析构的那个函数持有,其他函数借用都应用 get() 获取裸指针或者最好直接用 T& 而不是传递 unique_ptr。
shared_ptr 才是有少量开销的那个。问题是,如果觉得这个开销是多余的,那大概率应该用 unique_ptr。而且 shared_ptr 在生存期明晰时也是没必要传递的。
脱裤子放屁的 observer_ptr 没进标准,看来确实让人们迷惑了。
【 在 speedboy2998 的大作中提到: 】
: 直接传有助于编译器优化这是谣言还是定论?
: --
:
: ...................
--
修改:milksea FROM 114.249.235.*
FROM 114.254.3.*