代码:
https://github.com/gykimo/c_plusplus_optimize/tree/master/shared_ptr_vs_not
耗时结果:
[case 1] not_share_ptr_1attrs:
real 0m0.746s
user 0m0.230s
sys 0m0.005s
==========================
[case 2] not_share_ptr_1000attrs:
real 0m5.798s
user 0m5.362s
sys 0m0.023s
==========================
[case 3] share_ptr:
real 0m5.422s
user 0m5.059s
sys 0m0.018s
说明
share_ptr除了可以自动管理一个对象的生命周期外,还可以做另外一个事情,如果一个class有一个attr,该class经常被复制构造等,这个时候为了性能考虑,我们不想attr每次也复制构造,所以使用shared_ptr智能指针,让该class的多个对象共用一个attr;
但是通过上面的测试看,如果attr的长度或者数量较少时,使用shared_ptr性能更差,因为shared_ptr本身也会占用内存,另外,shared_ptr拷贝构造时,还要增加引用计数等,这些都是比较耗时的操作。
但是如果attr的长度足够长,如not_share_ptr_1000attrs,attr的长度是1000B,那么这个时候拷贝构造shared_ptr比拷贝attr更节省时间,所以这个情况下使用shared_ptr更合适。
网友评论