【问题标题】:Passing pointed object by reference [duplicate]通过引用传递指向对象[重复]
【发布时间】:2016-05-27 11:00:56
【问题描述】:

我有这个功能:

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);,我会失去一些性能吗?喜欢不必要的副本?

【问题讨论】:

  • 根据输出添加到复制构造函数中找出。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2011-08-28
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多