13

C++のアロケータがvoid型に特化していることに気づきました。これを行う特別な目的はありますか?voidタイプにメモリを割り当てるのは意味がありませんよね?

4

2 に答える 2

9

Matt Austernによるこの古い標準ライブラリアンのコラムには、この一口を含む、一般的なアロケータについてのかなり徹底的な議論があります。

ボイドについてどうしますか?コンテナがvoidポインタを参照する必要がある場合があり、再バインドメカニズムにより、必要なものがほぼ提供されますが、完全ではありません。これは機能しません。malloc_allocator::pointerのようなものを記述する必要があり、voidのインスタンス化が違法になるようにmalloc_allocatorを定義したからです。sizeof(T)を使用し、T&;を参照します。Tが無効の場合、どちらも合法ではありません。解決策は問題と同じくらい簡単です。voidにmalloc_allocatorを特化し、voidポインターを参照するために必要な最低限のものを除いてすべてを除外します。

malloc_allocatorは、Austernが彼の例で使用するサンプル実装ですが、一般的な場合にも当てはまります。

于 2011-08-22T06:36:17.000 に答える
2

voidへの参照を持つことができないため、アロケータはに特化する必要がありますvoid

于 2011-08-22T06:32:50.470 に答える