あなたが書いたとおりではありません。 list
パラメータは値渡しですので、ポインタlist
が指すリストのコピーです(2つの変数に別個の名前を付けておけば、質問の明確さに役立ちます)。
slotList
を参照(slotList(QList<MyClass> &list)
)でパラメータにするよう変更したとしても、内部ではdelete &list
にはまだ適していません。それはQtであるため、シグナル接続(キューに入れられた接続やスレッド間の接続など)は信号のパラメータ上ではなく、そのコピー上で直接動作します。
、何らかの理由で、あなたがスロットにクリエーター信号からリストの所有権を伝播し、そこにそれを削除する必要がある場合は、代わりにポインタを受け入れるためのスロットを変更する必要があります。
QList<MyClass *> *row = new QList<MyClass *>();
...
emit listReady(row);
void OtherClass::slotList(QList<MyClass> *list) {
...
delete list;
}
しかし、最も重要なのは、なぜ実際にQList
を最初に動的に割り当てるのですか?コンテナ(QList
など)は、ほとんどの場合、動的割り当てを必要としません。暗黙的な共有とコピーオンライトで実装されているQtコンテナではさらに多くのことが成り立ちます。したがって、QList
をコピーするだけでも安く(その内容はコピーされません)。したがって、正しい解決策は、row
をポインタの代わりにオブジェクトにして、new
/delete
のビジネス全体を忘れてしまう可能性があります。
最初の 'list'(ポインタ)は実際に' row'という名前にして後でその使用法に合わせるべきですか? – Angew