3

次のセットアップがあります(簡略化):

class A {
    public:
        void doBar() {  B b; b.bar();  }

    private:
        int foo;

        class B {
            public: void bar() {  /* do somehting with foo */  }
        };
};

今、VSは私に言います:

非静的メンバー参照は、特定のオブジェクトに関連している必要があります

まあ、それは合理的に聞こえます。ただし、このクラスBはプライベートAであるため、の(特定の)インスタンスのインスタンスの外で使用されることは決してないことを確信できますA(わかりました、の静的メソッドはA例外です)。

Aつまり、のメソッドからの現在のインスタンスB、つまりインスタンス化されたインスタンスを取得する機会はありB bますか? それ以外の場合は参照を渡すだけなので、特にクリーンなソリューションを探しています。

4

1 に答える 1

2

別のクラス内でクラスを宣言しても、「包含」は作成されず、クラス宣言のスコープのみが作成されます。Bオブジェクトは、一般的に言えば、オブジェクトに含まれていません。ただし、相互の参照を保持する方法によってオブジェクトAを作成しない限りです。

いいえ。この状況には特別なことは何もないため、 a がそれを作成しBた のインスタンスを判別できるメカニズムはありません。A

考えてみてBください。この例では、オブジェクトはスタック上に作成されますが、ヒープに割り当てられている可能性があります。Aオブジェクトは、'new' を使用してヒープ上、スタック上、カスタム ヒープ上、または 'placement-new' を介して作成された可能性もあります。メモリ内の 2 つのオブジェクト間にはまったく関係がありません。

于 2013-04-24T11:27:42.717 に答える