3

私は現在、SymbianプラットフォームでQtアプリケーションに取り組んでいます。アプリケーションにはsqliteデータベースがあり、初期データはtxtファイルから入力されます。

json形式のデータからオンライン更新を実装しています。そこで、クラス/構造体を取得し、それらからdbを更新するジェネリック関数をdbupdateクラスに作成したいと思いQListます。QListtxtまたはjsonのいずれかからのオブジェクトが入力されます。

パフォーマンスの観点から何が良いかを考えて、私はすでに解析を行っています。

  1. c ++構造体を作成し、それらを(オブジェクトは単純なデータのみを保持するため)ラップして渡すQList
  2. から派生したカスタムクラスを作成しQObject、それらをポインタとして渡してからQListqDeleteAll
  3. その他の方法で...
4

1 に答える 1

2

それは、クラスが動作を運ぶか、状態のみを運ぶかによって異なります。

  1. 彼らは振る舞いをします。

    次に、ポリモーフィック クラスが適切です。から継承する必要があるかどうかQObjectは別の問題です。そのサービス (イントロスペクション、シグナル/スロット、イベント処理) が必要な場合にQObject のみ継承します。そうでなければ、しないでください。

    に関してはqDeleteAll():私はそこに行きません。ネイキッド ポインターの代わりに、スマート ポインターを使用しますQSharedPointer。ペイロードへの参照の数を追跡し、refcount がゼロになると削除します。

    この場合、 は使用せずQList、 などのより効率的なコンテナーを使用しQVectorます。

  2. それらは状態のみを運びます。

    それなら、「ばか」でstruct十分かもしれません。この場合、QListコンテナーとして使用するのではなく、より効率的なものをQVector使用してください (メソッドをうまく使用することを忘れないでくださいreserve())。

一般に、whereQList<T>型および非 buildin/非 Qt 型は使用しないようにしてください。これらの型ではパフォーマンスが低下するためです。Tsizeof(T)>sizeof(void*)QList

于 2011-04-30T19:42:05.230 に答える