問題タブ [qsharedpointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
280 参照

c++ - 共有ポインターを介してメンバー関数を呼び出すコストはいくらですか?

スマート ポインターを逆参照しても、パフォーマンスに大きな影響はないとよく言われます。(例: C Smart Pointer Performance )

これが本当なのか今疑問に思っています。参照されているオブジェクトに対する操作がアトミックである場合、それが可能であることを理解しています。

このスニペットに基づいてコードを考える:

doWork()永続的に実行され、時々setDataProvider()2 番目のスレッドから呼び出されます。ごく普通のスマート ポインターの使用シナリオ。

一般的なコンセンサスではsetDataProvider()、ロックで保護された参照カウントを変更する必要があるため、追加のコストがかかると言われていますが、そうでm_provider->getSomeData()はありません。通常のポインター逆参照に匹敵すると言われていますが、少なくともコストのかかるロックは必要ありません。

しかし、それはどのように機能しますか?getSomeData()はアトミック操作ではなく、いくつかのロジックと顕著な実行時間があると仮定しましょう。

*m_provider実行中に削除されないようにするにはどうすればよいgetSomeData()ですか? クラスがオブジェクトの唯一の所有者である可能性があります。上書きm_providerすると、ポインターの参照カウントが 1 つ減少します。m_provider->getSomeData()一時的に参照カウントを上げる必要があるか、実行中にオブジェクトが削除されないように保護されていますgetSomeData()

どちらの場合も、コストのかかる同期/ロック メカニズムが必要です。

補遺:shared_ptr一般的にこれについて疑問に思っているので、例では標準を使用しました。ただし、実際のコードで使用されてQSharedPointerいるため、これについて特に興味があります。どちらも同じスレッド セーフであると単純に想定していましたが、これは間違っている可能性があります。

0 投票する
2 に答える
8579 参照

c++ - Qt アプリケーションには自動ガベージ コレクションがありますか?

私はこれを研究していますが、決定的な答えはありません。Qt ウィジェット アプリケーションは、終了時にメモリをクリーンアップしますか? QObject に由来する違いはありますか? ガベージコレクションがある場合、なぜQSharedPointerクラスがあるのですか? 私のコードの次のコンテキストから質問しています。

アプリケーションが終了すると、syncProcessクリーンアップされますか? ユーザーが終了せずにこの関数を 1000 回呼び出した場合、メモリ リークが発生しますか?

アップデート

上記の関数が頻繁に何度も呼び出されることを考えるとQProcess、メンバー変数を宣言する方が良いQSharedPointerですか、それとも上記のコードを改善するために使用するだけですか?

0 投票する
1 に答える
1569 参照

c++ - QList::QSharedPointer を含む

だから私は id データメンバーを持つクラスを持っていて、それを で使用していますがQList<QSharedPointer<MyClass>>、その中に既存の id があるかどうかを確認する方法がわかりませんQList。aではなく aQList::containsを必要とするのとまったく同じように、どうすればよいでしょうか。QSharedPointer<MyClass>&MyClass*

IDをキーとして使用するQHashを使用する必要がありますか?

0 投票する
1 に答える
627 参照

c++ - QSharedPointer オブジェクトにアクセスするときのセグメンテーション違反

以下のような小さなサンプル アプリケーション コードを作成しました。

デバッグ メッセージを 2 回目に出力すると、セグメンテーション違反とアプリケーションのクラッシュが表示されます。QSharedPointer のドキュメントによると、要素にアクセスした後、初めてポインターを削除している可能性があります。

QSharedPointer nav = m->getINav(); が欲しい これは、私の実際のシナリオの問題に対する一種のダミー アプリケーションであるため、while ループ自体に入る必要があります。

これを機能させる方法がわかりません。助けていただければ幸いです。前もって感謝します。

0 投票する
0 に答える
660 参照

c++ - QSharedPointers を値として Qmap を反復処理する

QSharedPointers を値として含む QMap があります。マップをループして結果を qDebug しようとするたびに、メモリ処理エラーが発生します。

マップの値は QObject を継承した Team クラスのオブジェクトです。

QMap 定義:

実装:

チームはコンテンツをマップします:

  • ("Detroit", Team), // "デトロイト" を市区町村、"Joe Louis Arena" を競技場とするチーム オブジェクト。
  • ("Pittsburgh", Team) // 都市としての "Pittsburgh" と "Mellon arena" というパラメーターを持つ Team オブジェクト。

qDebug の出力は次のとおりです。

「デトロイト」 - 「メロンアリーナ」
「」 - 「メロンアリーナ」

そこで何が起こるの?出力が正しいオブジェクトから都市を取得し、次のオブジェクトから面積を取得するのはなぜですか?

私はPythonのバックグラウンドから来ており、明らかにここでメモリが正しく処理されていません。しかし、私は例を検索しましたが、ここで何が間違っているのかわかりません。

マップからもキーを取得し、それを使用してマップから値を検索しようとしましたが、最初のループの後にプログラムがクラッシュします。

0 投票する
2 に答える
925 参照

c++ - なぜ QSharedPointer は::不完全なオブジェクトの呼び出しデストラクタを作成しますか?

次のコード例があります。

上記のコードの出力は次のとおりです。

しかし、出力のある行のコメントを外すとstd::make_shared、次のようになります。

では、なぜQSharedPointer::create不完全なオブジェクトのデストラクタを呼び出すのでしょうか? それはバグですか、それとも何か不足していますか?

MSVC2013+Qt 5.5.1MSVC2015+ Qt 5.6(ソースからビルド)で試してみました。結果は同じです。

0 投票する
1 に答える
408 参照

c++ - Qt でどのメモリ管理方法を使用する必要がありますか?

私は効率的にコーディングする方法をまだ学んでいるので、プログラミングにはまったく慣れていないので、私の質問は少し奇妙に思えるかもしれません.

Qt でコーディングする方法を学んでいると、Qt にはメモリ管理メソッドがあり、それ自体が削除されたときに親がすべての子を削除し、QSharedPointer他にも非常に多くのスマート ポインターがあることを知っています (または、言及することができますboost::shared_ptr)。

私は両方の方法がどのように機能するかを正確に理解していますが、私の質問は、Qt のシステム構造全体の設計に関しては、クラスのほとんどをサブクラスにQObjectして、所有権を QT に渡してメモリ管理を行うべきか、またはメモリ リークの可能性を回避するために単にboost::shared_ptrorを使用していますか?QSharedPointer

両方の手法を採用すると、二重削除の問題が発生する可能性があるため、考慮すべき問題がたくさんあります。

では、どちらの手法がより優れたパフォーマンスを発揮し、どちらが設計上優れているのでしょうか?