- 主题:智能指针作为参数到底传引用还是直接传有定论没有?
直接传有助于编译器优化这是谣言还是定论?
--
FROM 218.76.62.*
如果智能指针是在编译器中实现的,那么有那么一点可能编译器会利用到相关的语义信息做优化
但是c++中智能指针不都是用库的形式实现的吗
所以只能是谣言了
【 在 speedboy2998 的大作中提到: 】
: 直接传有助于编译器优化这是谣言还是定论?
--
FROM 71.198.4.*
肯定是直接传。哪能多一道弯传引用呢。
unique_ptr用std:move传。
【 在 speedboy2998 的大作中提到: 】
: 直接传有助于编译器优化这是谣言还是定论?
--
FROM 183.161.94.*
不敢苟同。你看的书文章里,介绍智能指针,都是传引用复制引用吗?没有吧。
【 在 BigCarrot 的大作中提到: 】
: 如果智能指针是在编译器中实现的,那么有那么一点可能编译器会利用到相关的语义信息做优化
: 但是c++中智能指针不都是用库的形式实现的吗
: 所以只能是谣言了
: ...................
--
FROM 183.161.94.*
智能指针,就是顶多两个机器字长吧,
shared_ptr有两个成员,一个引用计数,一个裸指针。
unique_ptr就一个裸指针成员。
顶多两个机器字长的,传值是没性能问题的,std::string_view就是这样的。
但传值还是传引用,更重要的是取决于怎么用这个智能指针吧
--
修改:z16166 FROM 221.218.167.*
FROM 221.218.167.*
高并发场景,传值的话,性能劣化很多
【 在 speedboy2998 的大作中提到: 】
: 直接传有助于编译器优化这是谣言还是定论?
--
FROM 114.118.31.*
chatgpt帮你总结的
1、传值:当需要改变智能指针的所有权(如std::unique_ptr)或明确共享所有权(如std::shared_ptr)时使用。
2、传引用:当只需要只读访问或避免额外性能开销时,使用引用传递(包括const引用)。
每种选择的关键是明确使用意图和所有权管理需求,而不是单纯考虑智能指针的大小。
--
FROM 221.218.167.*
原生指针的内存占有跟机器字长一样,胖指针稍微大一点;
那智能指针对象到底占多少内存?
如果内存占有不大,传值和传引用在效率上应该没多大区别吧
当然,看起来还要小心移动语义
【 在 z16166 的大作中提到: 】
: chatgpt帮你总结的
: 1、传值:当需要改变智能指针的所有权(如std::unique_ptr)或明确共享所有权(如std::shared_ptr)时使用。
: 2、传引用:当只需要只读访问或避免额外性能开销时,使用引用传递(包括const引用)。
: ...................
--
修改:easior FROM 114.94.33.*
FROM 114.94.33.*
我也这么认为
传值 还是 引用,取决于使用场景
如果 caller/callee 都会对 对象的生命周期有影响(比如caller调用下callee, caller执行完就退出),传值
如果确定 生命周期是由caller决定的,引用
【 在 z16166 的大作中提到: 】
: 智能指针,就是顶多两个机器字长吧,
: shared_ptr有两个成员,一个引用计数,一个裸指针。
: unique_ptr就一个裸指针成员。
: ...................
--
FROM 121.199.22.*
不涉及所有权的借用场景应该直接用裸指针,或者对象引用。
传智能指针引用的场景…不好想
【 在 z16166 的大作中提到: 】
: 智能指针,就是顶多两个机器字长吧,
: shared_ptr有两个成员,一个引用计数,一个裸指针。
: unique_ptr就一个裸指针成员。
: ...................
--
FROM 114.249.235.*