【问题标题】:Can one somehow retrieve the "host instance" from a private class?可以以某种方式从私有类中检索“主机实例”吗?
【发布时间】:2013-04-24 19:27:42
【问题描述】:

我有以下设置(简化):

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 的实例?我特别在寻找一个干净的解决方案,否则我只会传递参考。

【问题讨论】:

    标签: c++


    【解决方案1】:

    在另一个类中声明一个类不会创建“包含”,只会创建类声明的范围。您的 B 对象通常不包含在 A 对象中,除非您通过彼此持有引用的方式使它们如此。

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多