Outer *o
里面 Inner
并使用 Outer o
?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;
}
没有,如果你创建一个新的实例,情况会变得循环。你可以不使用指向外类的指针,而是使用一个引用,就像这样。
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;
}
如果我们假设:
class B b;
class A a;
那么大小的 A
和 B
是无限的。