通过参照传递尖锐对象

Passing pointed object by reference

本文关键字:对象      更新时间:2023-10-16

我有这个功能:

int foo(bar const&);

我想像这样使用它:

bar a;
foo(a);

这里不会发生任何副本。

但是如果我这样称呼它:

bar* a = new bar(); //not about dynamic allocation, I know it is not good
foo(*a);

foo(*a);,我会失去一些表现吗?喜欢不必要的复制?

这两种情况下都不会发生复制。例如,您可以通过删除 bar 的复制构造函数轻松确认这一点:

bar(bar const&) = delete; // cannot be copied
bar& operator=(bar const&) = delete; // cannot be reassigned

这将导致编译器错误,以防复制任何柱线对象。

不,不会有副本。给定一个值a类型为 T* ,表达式 *a 的类型为 T& - 即你正在传递一个引用。