|
|
1
28
既然你对效率感兴趣,我想提出两点: shared_ptr<>是移动构造比复制构造便宜的许多标准库类型之一。复制构造shared_ptr的速度较慢,因为复制需要引用计数器原子递增,而移动shared_ptr根本不需要接触引用的数据或计数器。来自文章“ Want Speed? Pass by value! “通过Dave Abrahams可以了解到,在某些情况下,按值取函数参数实际上是有益的。这是其中一种情况:
现在你可以写作了
其中参数是临时的,并且从不复制shared_ptr(只移动一到两次)。 这里使用std::make_shared的优点是只完成一次分配。在您的案例中,您自己分配了Stuff对象,shared_ptr构造函数也必须动态分配引用计数器和deleter。make_shared只需一个分配就可以为您完成所有任务。 |
|
|
2
5
是的,这完全合理。这样,管理共享指针所涉及的工作只需要完成一次,而不需要在按值传递的情况下完成两次。您也可以考虑使用make_shared来避免复制构造。
你能做的唯一改进是,如果Foo是唯一的所有者(即,你不会在创建Foo后保留foosStuff),那么你可以改用std::unique_ptr或boost::scoped_ptr(这是C++11之前的等价物),这将减少开销。 |
|
|
3
3
拥有一个
现在你可以说
你可以任意包装
也就是说,除非你真的
分享
所有权,a
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |