参考重新分配

我有一个通用的 C++ 问题。

假设我有这个代码:

int& GetInt()
{
    int* num = new int();
    return *num;
}

int numCopy = GetInt();

在这种情况下,返回的引用会发生什么?这个例子使用了一个简单的数据结构,所以它并不重要,但是在返回的数据更复杂的情况下,将变量分配给堆分配的变量引用,像这样将数据numCopy完全复制,或者将numCopy成为另一个参考原文num

回答

在这种情况下,返回的引用会发生什么?

它在完整表达式的末尾超出范围,您现在已经泄漏了您在其中获得的内存 GetInt. 您已复制引用所引用的值,但无法再访问原始对象及其占用的内存。

如果你有

int& foo = GetInt();

那么你以后可以做

delete &foo;

没有内存泄漏,但这仍然是不好的做法。


还是会numCopy成为对原作的另一种参考num

只有在您特别要求时才能获得参考。

int numCopy = GetInt();

numCopy是一个int,而不是一个int&,所以它不会是一个参考。C++ 具有所谓的值语义,这基本上意味着除非您要求引用,否则您创建的对象是它自己的对象,独立于所有其他对象。

  • @MattanMohel Correct. You can't enforce it gets assigned to a reference.

以上是参考重新分配的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>