sje397 が言ったように:QString
コンテナーは暗黙的に共有されるため、コンテナーをスタックに置くのは慣用的です。それらの内部 (pimpl イディオム "d" ポインター) はヒープ上に作成されます。オブジェクト自体をヒープ上に作成しても意味がありません。メモリ管理の手間が発生するだけで、文字列/コンテナーへのポインターを渡すときに、意図したコピーオンライト プロパティが失われます。
QObjects
一方、ほとんどの場合、ヒープ上に作成する必要があります。そうしないと、すぐに再び破棄されます。それらをコピーしたり割り当てたりすることはできません (まあ、それを独自のサブクラスに強制することはできますが、その場合QObject
セマンティクスは壊れます)。通常、それらは作成されたメソッド本体に存続することになっています。例外はQDialog
であり、多くの場合、スタックに続きQDialog::exec
、ダイアログが閉じられるまでブロックします。しかし、外部イベント (RPC 呼び出し、バックグラウンド操作) によって、exec が戻る前に (親自体が削除された場合) ダイアログがその親によって削除される可能性があるため、それは厳密には安全ではありません。次に、スタックにダイアログを作成すると、スタックを巻き戻すときに二重削除が発生します -> クラッシュします。