データを保持する単純な C++ クラスがいくつかあります。それらは階層的で、それぞれに子へのポインターのリストが含まれています (メモリにたくさんあるので、それらをコピーしたくありませんでした)。
私は最高レベルのみを処理し(関数に渡します)、各レベルのデストラクタでその子を破棄したいので、すべてを解放する必要があるのは、一番上の親で削除を呼び出すことだけです。これにより、一部のクラスがスタック上に作成されたときに問題が発生しますが、これは実際には問題の症状にすぎません。
私が見ているように、同じレベルでオブジェクトを作成および破棄する必要があるため、delete を呼び出す必要があるかどうかを知る必要があります。ただし、これにより、すべての子へのポインターを保持し、コードで使用するたびにそれらを破棄する必要があり、最上位の親で削除を呼び出すよりも汚い解決策になります。
したがって、私のオプションは次のとおりです。
- スタック上で定義しない (BAD)
- このオブジェクトを削除するかどうかを示すブール値をコンストラクターに渡します (BAD)
- 作成方法に応じて、使用するたびにオブジェクトを手動で削除します (BAD)
- アイテムを「ローカルに」コピーします(何千ものアイテムがある可能性があるため、悪いことです)
- スマートポインター?何かの枠組み?(使えるものはかなり限られます)
何か不足していますか?他のアイデアはありますか?
ありがとう、ヴァディム。