13

STLコンテナ(プラスstd::basic_string)を使用してキーまたはパスワードを一時的にメモリに保存したいのですが、完了したらメモリをゼロにしたいです。

私は当初、メモリをゼロにするカスタムアロケータでパラメータ化されたSTLコンテナを使用することを計画していましたallocator::deallocateが、コンテナは指定されたアロケータからのものではないメモリを使用できると想定しています。たとえば、astd::vectorまたはastd::stringに、小さな割り当て用の固定サイズの配列メンバーを含めることは合理的と思われます。

私は当然心配しています、そして私は(ため息をつく)自分のコンテナを書くべきですか?

4

3 に答える 3

8

std::vectorゼロ化を行うカスタムアロケータで使用します。5月の回答によると、std :: vectorは小さなバッファの最適化を利用していますか?、小さなバッファの最適化を使用できないため、カスタムアロケータを使用すると安全です。

さらに一歩進んで、そのアロケータを使用してベクトルを割り当て、スマートポインターを使用して適切にリリースされるようにすると(または手動で実行すると)、ベクトルの内部コンテンツ(サイズなど)も次のようになります。拭き取った。

于 2012-08-08T21:01:20.303 に答える
2

これを行うには、生のメモリと新しい配置を使用して文字列/ベクトルを割り当て、それが終わったら、デストラクタ、ゼロメモリを呼び出し、生のメモリの割り当てを解除します。

于 2012-08-08T21:05:36.737 に答える
-1

デストラクタのメモリバッファをゼロにするカスタム文字列クラスを使用します。

class zeroed_string : public std::string
{
public:
    ~zeroed_string()
    {
        for (int i = 0; i < size(); ++i)
            (*this)[i] = 0;
    }
// ...
};
于 2012-08-08T21:36:04.063 に答える