可以以某种方式从私人课程中检索"host instance"吗?

Can one somehow retrieve the "host instance" from a private class?

本文关键字:host 检索 程中 instance 方式      更新时间:2023-10-16

我有以下设置(简化(:

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的静态方法是个例外(。

那么,底线是,是否有机会从B的方法中获得A的当前实例,即B b实例化的实例?我特别想找一个干净的解决方案,因为否则我只会传递一个推荐信。

在另一个类中声明一个类不会创建"包含",只会创建类声明的范围。一般来说,B对象不包含在A对象中,除非您通过相互引用的方式使它们包含在内。

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

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