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对象中,除非您通过彼此持有引用的方式使它们如此。

所以不行; 没有任何机制B可以让 a 确定是哪个实例A创建了它,因为这种情况没有什么特别之处。

想想看:B在您的示例中,该对象是在堆栈上创建的,但它可能是堆分配的。该A对象也可能是使用“new”在堆上创建的,或者在堆栈上,或者在自定义堆上,或者通过“placement-new”创建的。内存中的两个对象之间根本没有关系。

于 2013-04-24T11:27:42.717 回答