Я написал простую программу:
#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 ….
Это просто вылетает ..
Я не могу найти причину ..
Я предполагаю, что вы имеете в виду:
list<int> a = func();
потому что в противном случае он даже не скомпилируется. В любом случае переменная a
никогда не выделялся new
, Это копия переменной, на которую указывает возврат func
,
Хотя вы возвращаете ссылку, вы копируете ее, потому что a
сам по себе не является ссылкой. Следующее будет работать:
list<int>& a = func();
delete &a;
Сбои: http://ideone.com/T3Iew
Работает: http://ideone.com/ONVKU
Во всяком случае, я надеюсь, что это для образовательных целей (что здорово, потому что вы понимаете угловые случаи), но для производственного кода это было бы очень очень неправильно.
Потому что вы объявлены как указатель, а не как ссылка. + Изменить list<int>* a
в list<int> & a
,
Но, пожалуйста, НИКОГДА не пытайтесь делать подобные вещи в рабочем коде.