たとえば、プロトタイプがあるとします。
QList<Foo *> *methodBar(int someParam);
このメソッドは、クライアント コードへの QList ポインターを返します。クライアント コードは、返されたポインターを破棄する必要があるかどうかをどのように認識しますか?
ポインターが与えられた場合、そのメモリを制御するのはあなたの仕事であるという規則はありますか? それともその逆?
これを解決するための私の考えは次のとおりです。
オプション 1: doc ブロックで、クライアント コードが QList の処理が完了したらそれを削除する必要があることを文書化します。
オプション 2 署名を次のように変更します。
void methodBar(int someParam, QList<Foo *> &listForOutput);
クライアントコードがリストを作成し、終了時にリストを破棄する必要があることを確実に認識できるようにします。
オプション 3
ある種のスマート ポインターを使用します。これが機能するかどうかはわかりませんが、 a を aQList*
内にラップしQPointer
て のコピーを返した場合QPointer
、内部を浅いコピーし、クライアント コードで が範囲外になったQList*
ときに想定しますQPointer
とともに破壊されQList*
ます。
では、これらのオプション (または、おそらく他のオプション) のうち、C++ の世界で最も一般的なものはどれでしょうか。これを行う標準的な方法がない場合は、個人的な好みによるという回答を受け入れます。