Tôi đã tìm kiếm StackOverflow nhưng không thể tìm thấy câu trả lời cho câu hỏi này.Cách đúng để giải phóng std :: vector của con trỏ trong C++ là gì?
Giả sử tôi có một số std::vector<Day *> vector_day
- tức là - vectơ con trỏ đến đối tượng Day
. Bây giờ tôi push_back
để vector_day
nhiều yếu tố:
vector_day.push_back(new Day(12));
vector_day.push_back(new Day(99));
vector_day.push_back(new Day(71));
...
Bây giờ tại một số điểm tôi không còn cần vector_day
. Thế nào là đúng cách để giải phóng bộ nhớ?
Nó này một cách chính xác:
for (std::vector<Day *>::iterator i = vector_day.begin(); i != vector_day.end(); ++i) {
delete *i;
}
Không này làm mất hiệu lực vector trên mỗi xóa? Tôi rất bối rối.
Có thể là một dupe của http://stackoverflow.com/questions/3054567/right-way-to-deallocate-an-stdvector-object –
RC - không thực sự, điều này là hoàn toàn khác. – bodacydo
Không đặt con trỏ vào như vậy. Điều gì sẽ xảy ra nếu ngoại lệ được ném giữa công cụ thời gian ở trong vectơ và nơi bạn xóa tất cả? Bạn sẽ bỏ qua nó và bị rò rỉ. Sử dụng một con trỏ thông minh, hoặc một container con trỏ, không bao giờ con trỏ thô. – GManNickG