通过引用传递尖的对象

时间:2016-02-16 08:57:36

标签: c++ pointers pass-by-reference

我有这个功能:

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);,我会放弃一些表现吗?像不必要的副本?

2 个答案:

答案 0 :(得分:2)

在任何一种情况下都不会发生任何副本。例如,您可以通过删除bar

的复制构造函数来轻松确认
bar(bar const&) = delete; // cannot be copied
bar& operator=(bar const&) = delete; // cannot be reassigned

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

答案 1 :(得分:1)

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