次の文章を含むいくつかのコードを継承しました。
TStringList* pPortList(NULL);
pPortList = FindCommPorts();
ConnectionDialog->PortList = pPortList;
int nModalReturn = ConnectionDialog->ShowModal();
delete pPortList;
FindCommPorts()
を作成しnew TStringList()
、入力して返す関数です。
コードを次のように置き換えてみたくなりました。
ConnectionDialog->PortList = FindCommPorts();
int nModalReturn = ConnectionDialog->ShowModal();
しかし、私は C++ の所有権のセマンティクスに十分に精通していないことに気付きました。の結果がdにFindCommPorts()
ならないため、メモリ リークが発生しますか?delete
編集:コードをもう一度見てみると、元のバージョンではポインターがハングしているとは思いません。ConnectionDialog->PortList
実際にはプロパティであることがわかりました (私は Borland C++Builder 6 を使用しています)。このプロパティには、文字列を からコピーするカスタム セッターがTStringList
あり、渡されたポインター自体はその後使用されません。これについて先に言及しなかったことをお詫びします。コードの書き方からすれば、間違いなく見栄えが悪いのです。