私はTのインタフェースを必要とするCコードを見るために、Tの動的配列を取得する必要があります。std :: vector <T>またはmake_unique <T[]>を使用してCコードへのポインタを渡します
std :: vectorを使用する必要がありますか?十分な数を確保して:: data()ポインターを渡すか、std :: make_uniqueを使用して渡す必要があります。
私はC++ 14です。
私はTのインタフェースを必要とするCコードを見るために、Tの動的配列を取得する必要があります。std :: vector <T>またはmake_unique <T[]>を使用してCコードへのポインタを渡します
std :: vectorを使用する必要がありますか?十分な数を確保して:: data()ポインターを渡すか、std :: make_uniqueを使用して渡す必要があります。
私はC++ 14です。
両方とも動作し、ほとんどの場合、個人的な好みの問題です。 しかし、配列やベクトルはC API呼び出しの前後で使用されます。
あなたはすでにvector
を持っている、あるいは単にresize
(ないreserve
)を使用して、それで行く、その後vector
でデータが必要になります。新しい配列を作成し、そこからデータをコピーする必要はありません。
しかし、データをローカルとアルゴリズムでのみ必要とする場合は、長さを変更する必要はありません。unique<T[]>
と言うと、固定サイズの配列の意図をより明確に表します。
データを格納するために使用されるコンテナに関係なく、ベクトルまたはT []の場合、std :: unique_ptrの使用に関する問題は、所有関係の無関係な問題です。後者の問題は、パフォーマンスよりも正確さの1つであるため、より重要な問題です。
ポインタの所有権を受信者関数に転送する場合は、std :: unique_ptrを使用するとよいでしょう。呼び出しの後でポインタの所有権を放棄しようとしない場合は、std :: unique_ptrは使用できません。
ハーブサッターはどちらか
https://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/
を開始するには良い場所を持っています。ベクトル関数は 'reserve'ではなく' resize'です –