我有这个功能:
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);
,我会放弃一些表现吗?像不必要的副本?
答案 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&
- 即您正在传递引用。