gpt4 book ai didi

c++ - 引用重新分配

转载 作者:行者123 更新时间:2023-12-05 09:05:30 25 4
gpt4 key购买 nike

我有一个一般的 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++ - 引用重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67186627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com