嵌套内部 class 访问外部 class

Nested inner class access to outer class

class Outer {
private:
    class Inner {
    private: Outer *o;
    public:
        Inner(Outer *outer):o(outer){}
        void visit() { o->d=65; }
    };
private:
    int d;
    Inner v;
public:
    Outer(int m):d(m),v(this){}
};

int main(int argc, char **argv)
{
    Outer out(16);
    return 0;
}

如果我们假设:

  • classA有一个成员变量class B b;
  • class B有一个成员变量class A a;

那么AB的大小是无穷大的

不行,如果你创建一个新的实例,情况就会变成循环。除了使用指向外部 class 的指针,您还可以使用引用,如下所示:

class Outer {
private:
    class Inner{
    private:
        Outer& o;
    public:
        Inner(Outer& outer) :o(outer) {}
        void visit() { o.d = 65; }
    };
private:
    int d;
    Inner v;
public:
    Outer(int m) :d(m), v(*this) {}
};

int main(int argc, char **argv)
{
    Outer out(16);
    return 0;
}