通过常量引用传递对象与传递无名称对象

Passing object by const reference vs passing nameless object

本文关键字:对象 无名 常量 引用      更新时间:2023-10-16

>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 向量遵循的模式

当您存储指针而不是值时,您将内存的所有权更改为向量类的客户端,因为通常,创建对象的人也应该负责解除分配它。