【问题标题】:When does dereferencing a pointer cause a copy to be made in c++?何时取消引用指针会导致在 C++ 中生成副本?
【发布时间】:2020-01-28 17:16:17
【问题描述】:

基本上我很好奇取消引用指针会导致复制。我的理解是指针是一个高级结构,如果你取消引用引用变量,它不会复制,但如果你取消引用变量,它会复制。

所以这不会复制:

int num = 10;
int *ptr = #
int& num2 = *ptr;

但这会:

int num = 10;
int *ptr = #
int num2 = *ptr;

正确吗?如果有的话,引用究竟什么时候会导致复制?

【问题讨论】:

  • 引用只是给一个对象一个不同的名字,因此不会导致复制。
  • 延迟指针不会导致复制,int n = someValue; 会复制。
  • 似乎我将引用和指针的想法混为一谈,但谢谢。这很有帮助。

标签: c++ pointers copy dereference


【解决方案1】:

单独取消引用永远不会产生副本。虽然取消引用指针只是应用 * 运算符,但您的代码中还发生了更多事情。

这里:

int num = 10;
int *ptr = #
int& num2 = *ptr;

最后一行取消引用指针并使用结果来初始化引用num2num2 现在引用 num。没有副本。

这里:

int num = 10;
int *ptr = #
int num2 = *ptr;

在最后一行中,您首先引用ptr,然后使用结果初始化num2。由于num2 是一个值,因此会生成一个副本。

你不需要指针就能看到同样的效果:

int x = 42;
int& y = x;   // no copy, y is an alias for x
int z = x;    // z is a copy of x

【讨论】:

  • 我明白了。我认为我将引用变量和取消引用指针混为一谈,因为它们具有相似的名称。这很清楚并且有道理;谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-03-15
  • 2013-02-19
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
相关资源
最近更新 更多