参考重新分配
我有一个通用的 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.