私は最近、「効率的な」逆シリアル化のために初期化されていない変数の透過性 (コンパイラ間で一般的な未定義の動作?) を利用する、かなり興味深いシリアル化アプローチに出くわしました。
メモリが割り当てられ、所定の値が割り当てられます。その後、配置 new を使用して構造体 (複雑なインプレース データ構造など) をインスタンス化し、初期化されていない変数を基礎となるメモリの値に「初期化」します。(以下のコードを参照)
それに加えて、かなり危険で、おそらくあまり快適なコーディング規則ではない可能性があります...誰かがこの方法に出くわしたのか、それとももっと重要なことに、それは何と呼ばれているのか疑問に思っていました.
class SomeClass {
public:
SomeClass() {}
int someInt;
};
int main(...) {
int dummy = 42;
int *pSomeClass = new (&dummy) SomeClass();
cout << pSomeClass->someInt << endl;
}
これにより、番号 42 が出力されます... ニート!