2013-05-28 55 views
7

一般に、Qtコンテナをディープコピーする正しい方法は何ですか?私はコンテナを再帰的に深くコピーすることを心配していませんが、そのような問題を解決することは役に立ちます。QMapと他のQtコンテナをディープコピーする方法

+2

上記のコードは私にとってうまく機能します - それはなぜそう思わないのですか? – cmannett85

+0

@ cmannett85私はGDBを通してそれを実行し、両方のマップに "value2"が含まれていることを確認しました –

+0

はい、私は最初にコードを誤読しました。私の答えを削除する。 –

答えて

11

Qtコンテナを詳細にコピーしていないことを誰もが教えてくれますが、浅いものではなく実際の深いコピーを実行するだけの状況があります。それを行うには、detach()を使用してください:

container1 = container2; 
container1.detach(); 
+0

素晴らしいです。これは答えです –

+0

これを行う必要があるときの例を挙げることはできますか? 'container1'を変更した瞬間、それを変更しなければディープコピーを実行します。なぜコピーしたいのですか? – cmannett85

+3

@ cmannett85ちょうど昨日、私はそれを正確に行う必要があった。私は2つのスレッドを持っています.1つはチャネル(ソケットに似ています)上のデータを受け取り、データを処理して、それを2つのコンテナに格納します。他のスレッドは、定期的に新しいデータをチェックすることによってデータをレンダリングします。新しいデータがある場合は、ミューテックスをロックし、いくつかのコンテナからデータをコピーします。これはディープコピーが必要な場所です。ディープコピーを実行しなかった場合、データ処理スレッドがそれらを変更すると、コンテナごとに別々にロックが行われ、パフォーマンスが低下します。 – kralyk

関連する問題