什么时候取消引用指针会导致在 C++ 中创建副本?
When does dereferencing a pointer cause a copy to be made in c++?
基本上我很好奇取消引用指针会导致创建副本。据我了解,指针是一种高级构造,如果您取消引用引用变量,它不会生成副本,但如果您取消引用变量,它会生成副本。
所以这不会复制:
int num = 10;
int *ptr = #
int& num2 = *ptr;
但这会:
int num = 10;
int *ptr = #
int num2 = *ptr;
对吗?如果有的话,引用到底什么时候会导致复制?
单独取消引用永远不会复制。尽管取消引用指针只是应用 *
运算符,并且您的代码中发生了更多事情。
这里:
int num = 10;
int *ptr = #
int& num2 = *ptr;
最后一行解引用指针并使用结果初始化引用num2
。 num2
现在引用 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
基本上我很好奇取消引用指针会导致创建副本。据我了解,指针是一种高级构造,如果您取消引用引用变量,它不会生成副本,但如果您取消引用变量,它会生成副本。
所以这不会复制:
int num = 10;
int *ptr = #
int& num2 = *ptr;
但这会:
int num = 10;
int *ptr = #
int num2 = *ptr;
对吗?如果有的话,引用到底什么时候会导致复制?
单独取消引用永远不会复制。尽管取消引用指针只是应用 *
运算符,并且您的代码中发生了更多事情。
这里:
int num = 10;
int *ptr = #
int& num2 = *ptr;
最后一行解引用指针并使用结果初始化引用num2
。 num2
现在引用 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