参考重新分配

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();

numCopyint,不是int&,所以不会作为参考。 C++ 有所谓的 value semantics,这基本上意味着除非您要求引用,否则您创建的对象是它自己的对象,独立于所有其他对象。