2015-03-18 29 views
8

Trong C++, có hai cách để khai báo một đối tượng. Ví dụ:C++ phân bổ đối tượng dựa trên ngăn xếp

// The first way 
vector<int> *nums = new vector<int>; 

// The second way 
vector<int> nums; 

Mọi người nói rằng tuyên bố đầu tiên phân bổ đối tượng trong heap và thứ hai trên chồng. Tôi có thể tưởng tượng nó hoạt động thế nào nếu đối tượng vectơ nằm trong heap. Trình biên dịch sẽ tìm thấy một khối miễn phí trong heap để lưu trữ vectơ. Nhưng điều gì sẽ xảy ra nếu đối tượng được cấp phát trên ngăn xếp khi tôi tiếp tục đẩy các phần tử mới vào vectơ? Sẽ có đủ không gian bộ nhớ? Nếu không, làm thế nào trình biên dịch sẽ tìm thấy một khối bộ nhớ đủ lớn trên ngăn xếp để lưu trữ vectơ khi kích thước của vec-tơ có thể thay đổi?

+3

vĩ đại người mới bắt đầu câu hỏi, và tuyên bố độc đáo. –

Trả lời

10

Đặt đối tượng trên ngăn xếp vector không có nghĩa là nó sẽ đặt các thành phần của nó lên ngăn xếp. Kiểm tra tài liệu:

Nội bộ, vectơ sử dụng mảng được phân bổ động để lưu trữ các phần tử của chúng. Mảng này có thể cần phải được phân bổ lại để tăng kích thước khi các phần tử mới được chèn vào, điều này ngụ ý phân bổ một mảng mới và di chuyển tất cả các phần tử vào nó.

Từ: http://www.cplusplus.com/reference/vector/vector/

+1

Có. Chỉ có vector "wrapper" nằm trong ngăn xếp. Nội bộ nó có lẽ chỉ chứa một con trỏ. Nó sẽ khác nếu nó là một mảng, trong đó kích thước mảng phải được giữ nguyên chính xác vì các vấn đề bạn yêu cầu. –

Các vấn đề liên quan