2013-07-10 3 views
9

からデータを消去し、それは言う:がのstd ::文字列をい::明らかとstd ::リスト::明確な文字列::クリア機能の説明では、メモリ

がクリア:は内容を消去します文字列は空の文字列(長さは0文字)になります。リストの説明::明確な関数で

、それは言う:

クリア:が(破壊される)リストコンテナからすべての要素を削除し、そしてサイズを有する容器を残し0

文字列とリストのメモリを上書きするか、それとも無料にしますか?

+1

メモリを解放しないでください。 C++ 11は、実装に少なくとも*要求*するメンバ関数 'shrink_to_fit'を提供しています。 –

+0

@CodyGray: 'のstd :: list'は(明確な'にメモリを解放していなかった場合、私は驚くだろう) '...あなたはおそらくSTD'を考えている:: vector'DavidRodríguez-dribeas @代わり –

+1

- 実装があります将来の再利用のためにリストノードをキャッシュすることができます。 Rogue Waveの図書館がこれほど多くのことをしたと私には思えます。 –

答えて

10

メモリは上書きされません。それは解放されることさえ保証されていません。

たとえば、巨大な文字列を作成してclearを呼び出すと、そのサイズのみが縮小されますが、割り当てられたメモリはまだ予約されている可能性があります。ただし、文字列が有効範囲外になると解放されます。

std::list少なくとも、リストをクリアすると、リスト内の要素が破壊されることが保証されます。

メモリに機密データが含まれている場合は、手動で上書きする必要があります。

11

消去されたデータを上書きする機能は必要ありません。

+4

+1実際には、リリースビルドでは上書きされないと仮定します。 –

関連する問題