2016-09-12 4 views
0

信号/スロットをstd :: shared_ptrでパラメータとして使用しているQtコードをテストしたいと思います。QSignalSpyとstd :: shared_ptr

私の問題は、他のすべてのタイプのパラメータでうまく動作するQSignalSpyクラスは、標準の共有ポインタを使用する場合にはうまく動作しないようです。実際、takeFirstメソッドはQVariantのリストを返します。

QVERIFY(arguments.at(0).value<std::shared_ptr<Canard>>() == canardInstance); // verify the first argument 

しかし、私は2つのスマートポインタが同じヒープメモリを参照し終わると、現在のスコープの外に行くとき、それはクラッシュ:私はそのようなことをやってのshared_ptrに引数を変換することができます。私の場合、QSignalSpyを使用する方法はありますか?

ありがとうございます!

+0

共有ポインタが必要ですか? Qtはそれ自身の種類の "メモリ管理"を持っているので、共有ポインタとうまく動作しません。回避策としてクラスにshared_ptrを格納することで、メモリを有効にしてraw-ptr(またはインデックス)を使用してスロットにアクセスするようにします。 – Hayt

+0

はい私は親を持つQObjectは望んでいませんが、むしろ何人かのスレッドと共有され、誰もそれが必要ないときに削除されるものです。 – CanardMoussant

+0

私はまだそれらを扱っていませんが、あなたは 'QSharedPointer'を見てみることができます。それ以外の場合は、Qtでstd共有ポインタを簡単に使用する方法はありません。 – Hayt

答えて

0

実際に私は完全にポイントを逃した。それは正常に動作していた(参照カウントが期待通りに機能していることを意味します)が、別の理由でメモリ破損が発生しました。私はQSharedPointerを使ってみたところ、同じ動作をしました。

関連する問題