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オブジェクトを格納および復元する方法を体験します.
例:
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つのアクセス制御を同時に持つことはできません.
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つのアクセス制御を同時に持つことはできません.