タイプの配列に対してリソース割り当てのクローン作成操作を実装していTます。単純な実装では、ソースから新しい配列への呼び出しがnew T[sz]続きます。std::copy記憶を2回歩きます。
生のメモリを割り当ててから使用したいstd::uninitialized_copyので、パフォーマンス上の理由からメモリを1回だけウォークします。カスタムアロケータが使用されている場合(Allocator.allocateその後にstd::uninitialized_copy)、これを実現する方法を知っています。また、(仕様のセクション20.4.1.1で以下std::allocatorを採用している)を使用してこれを実現する方法を知っています。私の懸念は、定義されているタイプでは、ベースのアプローチが間違っているように見えることです。Boost.TypeTraits'を使用してこのような状況を検出できることはわかっています。::operator newlib.allocator.membersstd::allocatorTT::operator newhas_new_operator
オーバーライドされた新しいメモリを尊重する方法で生のメモリを割り当ててから初期化する(そしてメモリを1回だけ渡す)、単純で標準に準拠した方法はありますか?そうでない場合、SFINAEを使用して、newを使用する実装std::allocatorとオーバーライドされた演算子newを使用する実装の間でディスパッチすることは合理的と思われますか?FWIW、Boostを介してgrepすることは、そのようhas_new_operatorな特性の使用を示していません。
ありがとう、Rhys