Hãy xem xét các đoạn mã sau:Trường hợp hiện std :: vector cấp phát bộ nhớ của nó?
#include <vector>
using namespace std;
void sub(vector<int>& vec) {
vec.push_back(5);
}
int main() {
vector<int> vec(4,0);
sub(vec);
return 0;
}
Giả sử "vec" không có không gian còn lại để lưu trữ 5 trong hàm "phụ", nơi nào nó cấp phát bộ nhớ mới?
Trong khung ngăn xếp của chức năng phụ? Trong trường hợp đó, 5 sẽ bị xóa ở cuối hàm phụ. Nhưng khung ngăn xếp của hàm chính không thể phát triển, vì khung ngăn xếp của hàm phụ nằm ở trên cùng của ngăn xếp tại thời điểm đó.
Có std :: vector phân bổ bộ nhớ cho các phần tử của nó trên heap không? Nhưng bộ nhớ heap miễn phí như thế nào? Nếu đó là một vector cục bộ trên ngăn xếp, khung ngăn xếp của một hàm bao gồm vectơ bị xóa ở cuối mà không báo hiệu vectơ mà nó sẽ bị xóa?
Bạn có thể muốn xem phân bổ STL. – pmdj
'sub (vector & vec)' được gọi là 'phụ (vec)' sẽ dễ đọc hơn;) –
LihO
** Nó cấp phát bộ nhớ tại Heap ** [std :: vector Implementation] (http: // codereview .stackexchange.com/questions/60484/stl-vector-implementation) –