参考重新分配
Reference Reassignment
我有一个一般的 C++ 问题。
假设我有这个代码:
int& GetInt()
{
int* num = new int();
return *num;
}
int numCopy = GetInt();
在这种情况下,返回的引用会怎样?这个例子使用了一个简单的数据结构,所以它并不重要,但在返回的数据更复杂的情况下,将变量分配给堆分配的变量引用,就像这样将数据完全复制到 numCopy
,或者 numCopy
会成为对原始 num
的另一个引用吗?
In this situation, what happens to the returned reference?
它在完整表达式的末尾超出范围,您现在已经泄漏了在 GetInt
中获取的内存。您复制了引用所指的值,但原始对象及其占用的内存不再可访问。
如果你有
int& foo = GetInt();
然后你可以稍后做
delete &foo;
避免内存泄漏,但这仍然是不好的做法。
or would numCopy
become another reference to the original num
?
只有在您特别要求的情况下,您才能获得推荐信。
int numCopy = GetInt();
说numCopy
是int
,不是int&
,所以不会作为参考。 C++ 有所谓的 value semantics,这基本上意味着除非您要求引用,否则您创建的对象是它自己的对象,独立于所有其他对象。
我有一个一般的 C++ 问题。
假设我有这个代码:
int& GetInt()
{
int* num = new int();
return *num;
}
int numCopy = GetInt();
在这种情况下,返回的引用会怎样?这个例子使用了一个简单的数据结构,所以它并不重要,但在返回的数据更复杂的情况下,将变量分配给堆分配的变量引用,就像这样将数据完全复制到 numCopy
,或者 numCopy
会成为对原始 num
的另一个引用吗?
In this situation, what happens to the returned reference?
它在完整表达式的末尾超出范围,您现在已经泄漏了在 GetInt
中获取的内存。您复制了引用所指的值,但原始对象及其占用的内存不再可访问。
如果你有
int& foo = GetInt();
然后你可以稍后做
delete &foo;
避免内存泄漏,但这仍然是不好的做法。
or would
numCopy
become another reference to the originalnum
?
只有在您特别要求的情况下,您才能获得推荐信。
int numCopy = GetInt();
说numCopy
是int
,不是int&
,所以不会作为参考。 C++ 有所谓的 value semantics,这基本上意味着除非您要求引用,否则您创建的对象是它自己的对象,独立于所有其他对象。