为什么结构不能包含自身的实例
Why structure can not contain Instance of itself?
我在 c++ 中读到结构,它不能包含自身的实例。谁能帮我理解为什么它不能包含自己的实例?
因为那样它会占用"无限"的存储空间,因为当它初始化时,它会递归地初始化自己。但是,您可以存储指向同一结构的指针。
例如,这是无效的:
struct a
{
int someVar;
a bad;
};
这是有效的(比如如果你想要这个结构的链表(:
struct a
{
int someVar;
a* good;
};
因为要创建它的实例,你需要创建变量,它本身就是它的实例 - 它将调用构造函数。
这将导致对构造函数的无限递归调用。
假设class A
有一个名为 a
的实例变量:
调用A
的构造函数将导致a
的初始化,这本身就是一个A
。为此 - 将再次调用 A
的构造函数。
甚至不会编译,因为编译器无法为其分配内存,它不知道为每个对象分配多少空间。存储实例变量a
需要多少空间?[任何有限的空间都不够,因为总会有一个额外的变量也需要分配]
struct bedroom
{
bed b;
table t;
bedroom r;
};
你现在看到问题了吗?一间卧室需要存储无限数量的床和桌子。
因为那样会导致 inifite 递归。
例如struct foo
{
int boo;
foo f;
};
foo f;
foo
将包含一个包含foo
等的foo
...
要绕过它,您应该使用指针:
struct foo
{
int boo;
foo* f;
};
不仅仅是结构,任何不完整的数据类型都不能在其中使用。假设您有一个结构 A 并且您已经包含与成员相同的结构,现在当编译器尝试为其分配内存时,它如何知道要分配多少,因为您在其中声明了尚未完全定义的结构 A,它将抛出一个错误不完整的数据类型不允许。
正如其他答案所指出的,结构不能包含自身的实例,因为这会导致创建结构时无限递归。 但是,结构可以包含指向自身的指针:
struct foo
{
int boo;
foo *f;
};
foo f;
f.f = &f;
因为不可能为这种结构创建内存布局。如果一个struct foo
包含一个int
和一个foo
,你如何将sizeof(int)+sizeof(foo)
字节放入sizeof(foo)
字节中?方程A+B=A
没有任何A,B > 0
解。
- (Wix 安装程序)如何包含自定义操作依赖项
- 在Visual Studio代码中包含自定义c++库的问题
- 每个类实例的自定义函数 (C++)
- 如何在 RANSAC 平面估算器中包含自定义约束/排名?
- 如何破坏包含自指指针的对象
- 如何在包含自定义对象的容器中使用分区函数C++
- C 发布的矢量包含自定义类的内存
- 如何比较/排序包含自定义 typedef 的列表容器的元素
- 将包含自定义项的部分添加到类文档中
- 模板函数实例化 自定义数据类型的问题
- C++ 不能在包含自定义结构的列表中使用push_back
- 如何包含自编译库中的标头
- 如何在 Linux 的C++文件中包含自定义头文件
- 在自定义类中实例化自定义类时出现"expected type-specifier"错误
- boost sharedmemory deque容器包含自定义类
- 如何在C++程序中包含自定义文件
- 在包含自定义类型的集合中查找
- 包含自定义头文件时出现编译器错误
- 循环访问包含自定义类C++的向量
- c++规范是否允许非虚类的实例包含虚值表指针的内存?