2016-10-01 8 views
0

私はTのインタフェースを必要とするCコードを見るために、Tの動的配列を取得する必要があります。std :: vector <T>またはmake_unique <T[]>を使用してCコードへのポインタを渡します

std :: vectorを使用する必要がありますか?十分な数を確保して:: data()ポインターを渡すか、std :: make_uniqueを使用して渡す必要があります。

私はC++ 14です。

+1

を開始するには良い場所を持っています。ベクトル関数は 'reserve'ではなく' resize'です –

答えて

0

両方とも動作し、ほとんどの場合、個人的な好みの問題です。 しかし、配列やベクトルはC API呼び出しの前後で使用されます。

あなたはすでにvectorを持っている、あるいは単にresizeないreserve)を使用して、それで行く、その後vectorでデータが必要になります。新しい配列を作成し、そこからデータをコピーする必要はありません。

しかし、データをローカルとアルゴリズムでのみ必要とする場合は、長さを変更する必要はありません。unique<T[]>と言うと、固定サイズの配列の意図をより明確に表します。

0

データを格納するために使用されるコンテナに関係なく、ベクトルまたはT []の場合、std :: unique_ptrの使用に関する問題は、所有関係の無関係な問題です。後者の問題は、パフォーマンスよりも正確さの1つであるため、より重要な問題です。

ポインタの所有権を受信者関数に転送する場合は、std :: unique_ptrを使用するとよいでしょう。呼び出しの後でポインタの所有権を放棄しようとしない場合は、std :: unique_ptrは使用できません。

ハーブサッターはどちらか

https://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/

関連する問題