2013-07-10 15 views
9

W opisie funkcji strun :: jasne, to mówi:Czy std :: string :: jasne i std :: list :: jasne kasuje dane z pamięci

jasne: Kasuje zawartość ciągu, który staje się pustym ciągiem znaków (o długości 0 znaków).

W opisie listy :: czytelnej funkcji, to mówi:

jasne: Usuwa wszystkie elementy z kontenera listy (które są zniszczone), pozostawiając pojemnik o rozmiarze z 0.

Czy wyraźne nadpisuje pamięć ciągu i listy lub po prostu je uwolnić?

+1

Nie zwalniaj pamięci. C++ 11 udostępnia funkcję członkowską 'shrink_to_fit', która przynajmniej * żąda * implementacji, aby to zrobić. –

+0

@CodyGray: Byłbym zaskoczony, gdyby 'std :: list' nie zwolnił pamięci na' clear() '... prawdopodobnie myślisz o' std :: vector' zamiast –

+1

@ DavidRodríguez-dribeas - implementacja jest dozwolone do buforowania węzłów list do przyszłego ponownego wykorzystania. Wydaje mi się, że biblioteka Rogue Wave zrobiła to bardzo dużo. –

Odpowiedz

10

Pamięć nie zostanie nadpisana. Nie można jej nawet uwolnić.

Na przykład, jeśli utworzysz duży ciąg znaków i zadzwonisz pod numer clear, zmniejszy się tylko jego rozmiar, ale przydzielona pamięć może być nadal zarezerwowana. Zostanie jednak zwolniony, jeśli łańcuch wydostanie się poza zasięg.

std::list co najmniej gwarantuje, że elementy na liście zostaną zniszczone po wyczyszczeniu listy.

Tak więc, jeśli pamięć zawiera poufne dane, należy ręcznie je zastąpić.

11

Żadna z funkcji nie jest wymagana do nadpisania wymazanych danych.

+4

+1 W rzeczywistości w wydaniu kompilacji zakładam, że nie jest nadpisany. –

Powiązane problemy