我写了一个简单的程序:
#include<iostream>
#include<list>
using namespace std;
list<int>& func();
int main(){
list<int> a = func();
delete &a;
std::cout<<"Here\n";
}
list<int>& func(){
list<int>* ptr = new list<int>;
return *ptr;
}
此程序从不将Here
打印到cout流....
它只是崩溃..
我无法找到原因..
答案 0 :(得分:6)
我猜你的意思是:
list<int> a = func();
因为否则它甚至不会编译。无论如何,变量a
从未与new
一起分配。它是func
返回引用的变量的副本。
虽然您返回了引用,但您复制它是因为a
本身不是引用。以下方法可行:
list<int>& a = func();
delete &a;
无论如何,我希望这是出于教育目的(这很酷,因为你可以理解角落案例),但对于生产代码,这将是非常非常错误。
答案 1 :(得分:1)
因为您声明为指针而不是引用。将list<int>* a
更改为list<int> & a
。
但请不要试图在生产代码中做那种事情。