4

memmovable 型 (QList、QString、int など) のみを含むブースト バリアントをラップするクラスがあります。

そのラッパー クラス memmovable を Qt コンテナーに宣言してもよろしいですか?

4

2 に答える 2

2

Aには、標準で POD であることが保証されてboost::variantいる整数インデックスと のみが含まれます。aligned_storage仮想メンバーはありませんが、ユーザー定義のコンストラクターとデストラクターがあります。結果として、boost::variantはPODではなく、UBであることに注意しようとしています(まあ、それはUBだと思いますが、標準には決定的な参照が見つかりません)。

QListただし、QString、 などについても同じことが言えます。どうやら、Qt は一部の非 POD 型を安全に memmoved できると想定しており、POD (いわゆる「プリミティブ型」) と「可動型」を区別しています。

したがって、 memmove a が安全であると考える場合は、 memmovable 型を含むQLista を memmove しても安全であると考えることができます。boost::variant

于 2012-06-06T10:15:07.393 に答える
1

おそらく、POD 以外のタイプの memmoving は技術的に未定義の動作であることをご存知でしょう。それはさておき、バリアントには memmoved で問題になるようなものは何も含まれていません。あなたは QList と QString が memmovable であると述べており、それらが POD であるとは信じられません (私は見たことはありませんが)、boost::variant は悪くありません。

于 2012-06-06T09:46:41.730 に答える