タグ付けされた質問 「allocator」

16
カスタムC ++アロケーターの説得力のある例?
std::allocatorカスタムソリューションを採用する理由は何ですか?正確性、パフォーマンス、スケーラビリティなどのために絶対に必要な状況に遭遇しましたか?本当に賢い例はありますか? カスタムアロケーターは、常に標準ライブラリの機能であり、あまり必要がありませんでした。ここのSOの誰かが彼らの存在を正当化するための説得力のある例を提供できるかどうか疑問に思っていました。

3
polymorphic_allocator:いつ、なぜ私はそれを使うべきですか?
ここでは上のドキュメントですcppreferenceは、ここでのワーキングドラフトです。 私は、本当の目的が何でpolymorphic_allocator、いつ/なぜ/どのように使用すべきかを理解していなかったことを認めなければなりません。 例として、にpmr::vectorは次の署名があります。 namespace pmr { template <class T> using vector = std::vector<T, polymorphic_allocator<T>>; } polymorphic_allocatorオファーは何ですか?std::pmr::vector昔ながらのものに関して同様にオファーは何std::vectorですか?今までできなかったことが、どうしたらいいですか? そのアロケータの本当の目的は何ですか、いつ実際に使用する必要がありますか?
120 c++  allocator  c++17 

3
shared_ptrのdeleterは、カスタムアロケーターによって割り当てられたメモリに格納されていますか?
私が持っていると言うshared_ptrカスタムアロケータでとカスタム削除手段。 削除プログラムを保存する場所について話している標準では何も見つかりません。カスタムアロケータが削除プログラムのメモリに使用されることはなく、そうでないこともありません。 これは指定されていませんか、それとも何か不足していますか?

1
古いalloctaor :: constructと新しいalloctaor :: constructの違いは何ですか?
私が知っているようにstd::allocator<T>::construct、C ++の古いバージョンでは2つのパラメーターしか使用しません。T1つ目は、型のオブジェクトを構築する生の未構築メモリへのポインタで、2つ目は、そのオブジェクトを初期化するための要素型の値です。したがって、コピーコンストラクタが呼び出されます。 struct Foo { Foo(int, int) { cout << "Foo(int, int)" << endl; } /*explicit*/ Foo(int) { cout << "Foo(int)" << endl; } Foo(const Foo&) { cout << "Foo(const Foo&)" << endl; } }; int main(int argc, char* argv[]) { allocator<Foo> a; Foo* const p = a.allocate(200, NULL); // …
15 c++  allocator 

2
安全な暗号化キーのstd :: arrayにカスタムアロケーターを使用できますか?
私std::arrayは完全にスタックに割り当てられていることを知っていますが、この質問は2つのことを必要とするセキュリティの懸念によって動機付けられています: のデータはstd::array破棄時にゼロ化またはランダム化されます のデータはロックstd::arrayされるため、クラッシュやスワップメモリ​​のいずれでもディスクに移動することはありません 通常、でstd::vectorの解決策は、これらのことを行うカスタムアロケータを作成することです。ただし、の場合std::array、これを行う方法がわからないため、この質問についてもわかりません。 私ができる最善のことはこれです: template <typename T, std::size_t Size> struct SecureArray : public std::array<T, Size> { static_assert(std::is_pod<T>::value, "Only POD types allowed") static_assert(sizeof(T) == 1, "Only 1-byte types allowed") virtual ~SecureArray() { std::vector<uint8_t> d = RandomBytes(Size); // generates Size random bytes std::memcpy(this->data(), d.data(), Size); } } ただし、これには明らかにメモリロックが欠けstd::arrayてstd::arrayおり、そもそも使用することで得られるパフォーマンススキームが複雑になります。 より良い解決策はありますか?

1
ユーザー提供のstd :: allocator特殊化
::std名前空間内のクラステンプレートは、通常、ユーザー定義型のプログラムに特化できます。私はこのルールに例外を見つけませんでしたstd::allocator。 それで、std::allocator私は自分のタイプに特化することを許可されていますか?また、許可されている場合、std::allocatorの主なテンプレートのすべてのメンバーを提供する必要がありstd::allocator_traitsますか? このプログラムを検討してください #include<vector> #include<utility> #include<type_traits> #include<iostream> #include<limits> #include<stdexcept> struct A { }; namespace std { template<> struct allocator<A> { using value_type = A; using size_type = std::size_t; using difference_type = std::ptrdiff_t; using propagate_on_container_move_assignment = std::true_type; allocator() = default; template<class U> allocator(const allocator<U>&) noexcept {} value_type* allocate(std::size_t n) { if(std::numeric_limits<std::size_t>::max()/sizeof(value_type) …
8 c++  c++17  allocator 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.