通过常量引用传递对象与传递无名称对象
Passing object by const reference vs passing nameless object
>C++11;
给定两个类,A 类和 B 类,其中 A 类存储 B 类的数据成员,是否更有效;
1:创建一个类型为 B 的对象和类型 A,然后将类型为 A 的对象传递给 B 类型的对象;
A storage;
B object(1,2,3);
storage.add(object);
2:创建一个A类型的对象,并传递给它一个B类型的无名称对象,例如;
A storage;
storage.add(B(1,2,3));
这些调用在性能方面是否相等?
现在假设我是否想要 A 型的向量来存储我传递给 A 型的 B 型对象;每次调用 storage.add() 时,我都会制作两个类型 B 的副本,无论我是将存储对象传递给对已创建对象的引用还是将匿名对象直接传递给 A 类型的对象?
在将 B 对象的向量存储在类型 A 中的情况下,传递 B 类型的无名称对象,将它们存储在向量中,并返回指向向量元素的指针,还是创建 B 类型的对象,并将指针传递给 storage.add() 并将 B 类型的对象存储在指针向量中会更有效吗?
我希望我已经明确了我的意图。如果我的意图不太清楚,我将发布一个代码示例。我只是不确定传递对象的最有效方法是当我还需要通过调用我的存储类来返回它们时。
这些调用在性能方面是否相等?
在具有新移动语义的 C++11 中,性能大致相同。如果使用自己的类,请确保它们实现移动构造函数和移动赋值运算符。
在将 B 对象的向量存储在类型 A 中的情况下,传递 B 类型的无名称对象,将它们存储在向量中,并返回指向向量元素的指针,还是创建 B 类型的对象,并将指针传递给 storage.add() 并将 B 类型的对象存储在指针向量中会更有效吗?
如果要引用 STL 向量,则匿名对象将获得最佳性能,因为否则,您的对象将被复制,因为 STL 存储值而不是引用。
从集合返回对象的经验法则是通过引用返回它们。这就是 STL 向量遵循的模式
当您存储指针而不是值时,您将内存的所有权更改为向量类的客户端,因为通常,创建对象的人也应该负责解除分配它。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 如何创建抽象类的无名派生类的对象