c++中POD类型和non-POD类型AI介绍:
POD vs non-POD类型
POD类型(Plain Old Data)
- 简单C兼容类型:像C结构体一样
- 特点:无虚函数、无用户定义构造/析构函数、无引用成员、标准内存布局
- 示例:
non-POD类型
- 所有其他类型:有虚函数、用户定义函数、复杂继承等
- 示例:
核心区别
- 内存操作:POD可用
memcpy/memset,non-POD不行 - 初始化:POD支持
{}初始化,non-POD需要构造函数 - C兼容性:POD可传递给C函数,non-POD不能
- 布局:POD内存布局确定,non-POD可能有虚表指针
实际影响
// POD
Point p = {1, 2}; // OK
memcpy(&p2, &p, sizeof(p)); // OK
// non-POD
std::string s1 = "hello";
// std::string s2 = s1; // 需要复制构造函数
// memcpy(&s2, &s1, ...); // 错误!会崩溃一句话总结:需要低级内存操作或C互操作时用POD,否则用non-POD特性。
非pod类型的对象实例,使用write,read函数,直接将对象保存和读取到文件时会崩溃,只能选择合适的序列和反序列化方法,将对象中的各种数据类型保存到文件,读取时再进行恢复到对象中。