【发布时间】:2015-02-18 01:21:04
【问题描述】:
讨论的是函数中的某些动态分配的变量(除 main 之外)是否可以通过引用返回。
我们应用 this 的地方不同,但为了说明这一点,我将考虑返回一个简单的 int,如下所示:
int& myFunc() {
unique_ptr<int> p(make_unique<int>(10));
int& r = (*p); // A reference to the value in heap pointed by p.
return r;
}
现在,即使指针句柄在超出范围后丢失,我们仍然有另一个句柄(即引用变量 r)来访问动态分配的值为 10 的 int。
我的导师说它可能会出现编译错误,但是当我编译并运行代码时,它运行良好。
那么,这是允许的还是有任何危险?
【问题讨论】:
-
你没有在那里返回任何引用并且你是确实在泄漏内存。
-
你在返回一个副本然后泄漏内存,所以这确实很危险,但允许。
-
哇,等等。你是什么意思我没有返回任何参考?
-
@Bazooka,除非您返回唯一指针,否则它将在函数末尾超出范围并删除其分配的内存,这意味着访问返回的
int的地址将导致在未定义的行为中。 -
请停止编辑问题。答案会根据您的编辑而不断变化,因为您会不断改变问题!
标签: c++