Trong ví dụ này, tại sao việc trả về biến ngăn xếp là ok? Khi t() trả về, tại sao nó không trả về rác, vì con trỏ ngăn xếp đã được tăng lên?trả về biến ngăn xếp C++
#include <<string>>
#include <<vector>>
#include <<iostream>>
using namespace std;
class X{
public:
X() { cout << "constructor" << endl; }
~X() { cout << "destructor" << endl; }
};
vector <X> t()
{
cout << "t() start" << endl;
vector<X> my_x;
int i = 0;
printf("t: %x %x %x\n", t, &my_x, &i);
my\_x.push\_back(X()); my\_x.push\_back(X()); my\_x.push\_back(X());
cout << "t() done" << endl;
return my_x;
}
int main()
{
cout << "main start" << endl;
vector <X> g = t();
printf("main: %x\n", &g);
return 0;
}
đầu ra:
./a.out
main start
t() start
t: 8048984 bfeb66d0 bfeb667c
constructor
destructor
constructor
destructor
destructor
constructor
destructor
destructor
destructor
t() done
main: bfeb66d0
destructor
destructor
destructor
Đó là nguy hiểm để trả về một tài liệu tham khảo ** ** cho một biến trên stack như bạn có thể kết thúc với rác. Nếu không, một bản sao sẽ được xây dựng và giao cho người gọi. –