類的大小至少是一個字節。
但是,如果一個類包含它自己的兩個副本,那麼它必須至少有兩個字節。
但是,如果它至少有兩個字節(並且包含它自己的兩個副本),那麼它必須至少有四個字節。
但是,如果它至少有四個字節(並且包含它自己的兩個副本),那麼它必須至少有八個字節。
...等等... :-)
你可以有一個包含兩個引用同一個類的實例的類:
struct X {
int x;
X &a, &b;
X(int x, X& a, X& b) : x(x), a(a), b(b) {}
};
建設的第一個實例是不平凡因爲引用必須在構造函數中設置,並且以後不能更改。仍然有可能建立一些掛羊頭賣狗肉網絡......例如
extern X x1;
extern X x2;
extern X x3;
X x1(1, x2, x3);
X x2(2, x3, x1);
X x3(3, x1, x2);
這x1.a.b.a.a.b.b.a.b.a.a.a.b.a.x
後1
你終於可以有一個包含指向同一個類的實例類。這是一個相當常見的模式(例如,用於二叉樹):
struct Node {
int value;
Node *left, *right;
Node(int value, Node *left, Node *right)
: value(value), left(left), right(right)
{}
};
與指針的好處是,你不會強迫指定實例(可以使用空指針來代替),而你也可以稍後更改指針指向的內容。不幸的是,語法有點煩人(需要->
)。
另外一個非常容易的選擇(但它僅適用於樹木,而不是任意拓撲結構)是包含同一個類的實例的容器類,例如:
struct Node {
int x;
std::vector<Node> children;
Node(int x) : x(x) {}
};
這工作,因爲children
容器也可能是空的(所以大小不會爆炸到無窮大),並在內部使用指針進行管理。
你不能做到這一點。回頭一步,詳細描述這個問題的解決方法,也許我們可以幫助你解決這個問題。 –
關於來自@BenjaminLindley的評論,您可能想了解[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 –
即使是1棟房屋也不可能。編譯器是否可以爲足夠大的房子預留足夠的內存用於Jack以及另一個足夠大的Jack,再加上另一個足夠大的Jack,再加上另一個足夠大的Jack,再加上另一個足夠大的房子傑克再加上另一棟足夠大的房子,再加上另一棟足以容納傑克的房子,再加上另一棟足以容納傑克的房子,再加上另一棟足夠大的房子,再加上另一棟足夠大的傑克加上另一棟房子,對傑克再加上另一棟房子足夠大...? – fredoverflow