可以以某种方式从私人类中检索“主机实例”吗?

时间:2013-04-24 11:12:41

标签: c++

我有以下设置(简化):

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

    private:
        int foo;

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

现在,VS告诉我:

  

非静态成员引用必须相对于特定对象

嗯,好吧,这听起来很合理。但是,由于此类BA是私有的,我可以确定它永远不会在A的(特定)实例的实例之外使用(好吧,静态方法A是一个例外)。

那么底线,是否有机会从A的方法获取B的当前实例,即B b实例化的实例?我特别想找一个干净的解决方案,否则我只是传递参考资料。

1 个答案:

答案 0 :(得分:2)

在另一个类中声明一个类不会创建“包含”,只会创建类声明的范围。 B对象不包含A个对象,除非您根据彼此之间的引用来制作它们。

所以,不;没有B能够确定A的哪个实例创建它的机制,因为这种情况没有什么特别之处。

考虑一下:B对象是在您的示例中的堆栈上创建的,但它可能已经堆分配。 A对象也可能已在堆上使用'new'创建,或者在堆栈上,或在自定义堆上创建,或者通过'placement-new'创建。内存中的两个对象之间没有任何关系。