3

これは、スマート ポインターについて考え、非所有に生のポインターを使用する正しい方法ですか?

class DisplayObject {
    DisplayObject* Parent;
};

class DisplayObjectContainer: public DisplayObject {
    std::vector<DisplayObject*> Children;
};

class Stage {
    std::vector<std::unique_ptr<DisplayObject>> DisplayObjects;
};


make_unique<DisplayObject>
アイテムはまたはを使用して作成されます
make_unique<DisplayObjectContainer>

Stage はすべてのDisplayObjectクラスを所有しますが、DisplayObjectContainerStage が所有するオブジェクトへの生のポインターを持ちます。

DisplayObjectParent ( の場合もありますnullptr) もあります。

DisplayObjects.back().get()また、ステージの DisplayObjects を取得し、項目をベクター ( )に追加してそのオブジェクトへのポインターを取得し、std::move

これは、スマート ポインターと所有権を使用する正しい方法ですか?

4

1 に答える 1

5

あなたのコードを見て、はい。これは、コードを整理するための完全に良い方法のように見えます: 明示的な所有権を保持している単一のクラスがあり、生のポインターを使用する他のすべてのクラスは、それが指しているものを所有していません。これにより、コードがクリーンで効率的になり、それを使用するすべての人がいつ、どのように壊れるかを知ることができます。

このコードを共有し始める場合は、生のポインターはリソースを所有していないことを意味し、リソース自体を削除または新規作成しないことを前もって全員に伝えてください。これを事前に知っておくと、人々が使用する/メソッドに渡すポインターを手動で新しくする必要があるかどうかについての混乱を防ぐことができます。

サイドノート:

DisplayObject? DisplayObjectContainer? AS3 のC++ の表示階層によく似ています。それは面白そう。あなたの人生に幸あれ。

于 2013-04-15T04:37:12.687 に答える