通过引用传递指向的对象

Passing pointed object by reference

我有这个功能:

int foo(bar const&);

我想这样使用它:

bar a;
foo(a);

这里不会发生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

如果正在复制任何条形对象,这将导致编译器错误。

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