PODオブジェクト


PODタイプ(Plain Old Data)は、C++の内部とCメモリ構造が完全に互換性のある構造です.
PODタイプTのオブジェクトの場合、そのオブジェクトがタイプTの有効な値を持っているかどうかにかかわらず、そのオブジェクトの最下位バイトシーケンスを1つの文字配列(または符号なし文字配列)にコピーしてオブジェクトにコピーすると、そのオブジェクトの値は元の値と同じになります.
任意のPODタイプTについて、2つのTポインタがそれぞれ2つの異なるオブジェクトobj 1とobj 2を指す場合、memcpyライブラリ関数でobj 1の値をobj 2にコピーすると、obj 2はobj 1と同じ値を持つ.
簡単に言えば、PODオブジェクトに対して、そのバイナリコンテンツは任意にコピーすることができ、どこでも、そのバイナリコンテンツがあれば、正しいPODオブジェクトを復元することができる.任意のPODオブジェクトに対してmemset()関数または他の類似のメモリ初期化関数を使用できます.
今すぐやる
PODオブジェクトの意味をよりよく理解するために、memxxx()関数を使用してPODオブジェクトを格納および復元する方法を体験します.
#include<stdio.h>
#include <cstring>

//PERSON POD  
struct PERSON
{
	char _name[16];
	int _age;
	bool _gender;
};

void print(PERSON * p)
{
	printf("%s,%d,%s\r
", p->_name, p->_age, (p->_gender ? " " : " ")); } int main() { //POD PERSON p1 = { " ", 28, false }; PERSON p3 = { " ", 26, true }; print(&p1); print(&p3); // p1 char char bytes[sizeof(PERSON)]; memcpy(bytes, &p1, sizeof(PERSON)); PERSON p2; memset(&p2, 0, sizeof(PERSON)); print(&p2); // char p2 memcpy(&p2, bytes, sizeof(PERSON)); print(&p2); // p3 p2 memcpy(&p2, &p3, sizeof(PERSON)); print(&p2); return 0; }

例:
struct S { int a; };//SはPOD struct SS{int a;SS(int aa):a(aa){};//SSはPOD struct SSSではない{virtual void f();...};//SSSはPODではありませんが、C++のSSのメモリ構造は、Cと互換性があるのではないでしょうか.構造関数がある以外に、確かに特別なところはありません.はい、C++11の中で、SSはPODです.
1つのstructは、PODでも条件を満たす限り、
1.虚関数がない2.ダミーベースクラス3はありません.参照4はありません.アクセス制御は、1つのPODタイプではpublicとprivateの2つのアクセス制御を同時に持つことはできません.