2013-07-10 43 views
9

Trong mô tả của hàm chuỗi :: rõ ràng, nó nói:Liệu std :: string :: rõ ràng và std :: Danh mục :: rõ ràng sẽ xóa dữ liệu từ bộ nhớ

rõ ràng: Xóa nội dung của chuỗi, chuỗi này trở thành một chuỗi rỗng (có độ dài 0 ký tự).

Trong mô tả của danh sách :: chức năng rõ ràng, nó nói:

rõ ràng: Loại bỏ tất cả các yếu tố từ các thùng chứa danh sách (mà bị phá hủy), và rời khỏi container với một kích thước của 0.

Xóa ghi đè của chuỗi và danh sách hoặc chỉ giải phóng chúng?

+1

Không giải phóng bộ nhớ. C++ 11 cung cấp một hàm thành viên 'shrink_to_fit' có ít nhất * yêu cầu * việc triển khai thực hiện. –

+0

@CodyGray: Tôi sẽ ngạc nhiên nếu 'std :: list' không giải phóng bộ nhớ trên' clear() '... bạn có thể đang nghĩ về' std :: vector' thay vì –

+1

@ DavidRodríguez-dribeas - việc thực hiện được phép lưu các nút danh sách để tái sử dụng trong tương lai. Dường như với tôi rằng thư viện của Rogue Wave đã làm được rất nhiều điều này. –

Trả lời

10

Bộ nhớ không bị ghi đè. Nó thậm chí không được bảo đảm để được giải phóng.

Ví dụ: nếu bạn tạo một chuỗi lớn và gọi clear trên đó, chỉ kích thước của nó sẽ bị giảm, nhưng bộ nhớ được phân bổ vẫn có thể được đặt trước. Tuy nhiên, nó sẽ được giải phóng nếu chuỗi bị vượt quá phạm vi.

std::list ít nhất đảm bảo rằng các thành phần bên trong danh sách sẽ bị hủy nếu bạn xóa danh sách.

Vì vậy, nếu bộ nhớ của bạn chứa dữ liệu nhạy cảm, bạn nên ghi đè lên chúng theo cách thủ công.

11

Không có chức năng nào được yêu cầu để ghi đè lên dữ liệu đã xóa.

+4

+1 Trong thực tế, trong một bản phát hành, tôi giả sử nó không bị ghi đè. –

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