C++:POD Pros\Cons

Jon*_*han 11 c++ pod

  • 哪些利弊使用C++中平原旧数据(POD)结构\ Classes下
  • 在什么情况下,人们应该更喜欢使用它们而非非POD?
  • 具体来说,POD在使用序列化框架时是否具有优势?也许在跨平台和跨语言工作时?

mmm*_*mmm 6

POD与常量相结合有一个优点.

如果您声明/定义一个常量并为其使用POD类型,则整个POD将被放入可执行文件/库的(常量)数据部分,并在加载后可用.

如果使用非POD,则构造函数必须运行以初始化它.由于在C++中运行静态类的构造函数的顺序是未定义的,因此无法从静态B的构造函数或从静态B的构造函数中调用的任何代码访问静态A.

因此在这种情况下使用POD是安全的.


kfm*_*e04 6

如果你有大量的小物件,确保那些物体是POD可以是一个巨大的优势.

  1. 你可以使用calloc()或malloc()中的一大块,为你节省大量的构造函数.
  2. 对于持久性,您可以使用fwrite()和fread()的整个块来提高速度,而不是一次一个地流出对象.

缺点是,您必须保持灵活处理代码中的非OOP POD.POD是旧式C代码的后备,您可以在其中了解并关注数据的布局.当布局定义明确时,您可以通过处理内存块而不是大量小块进行优化.

请注意,我上面描述的内容适用于简单布局的结构.换句话说,如果你在这个类型上调用type_trait的std :: is_trivially_copyable(),你就会得到真的.对POD的要求实际上甚至比普通可复制结构的要求更强.所以我刚才描述的内容适用于所有POD甚至一些碰巧可以轻易处理的非POD.


sha*_*oth 3

POD 可以在 C 接口中使用,这意味着您可以拥有一个用 C++ 编写的库,但具有 C 接口,这可能是有利的。

缺点是您不能使用构造函数将初始化负担放到类型本身上 - 用户代码必须处理这一点。