{{indexmenu_n>8}} ====== value class ====== C++のクラスは、= や実体による引数の受け渡しによってコピーできます。ref classで定義されたクラスはoperator= や コピーコンストラクタをもたない場合勝手にコピーされることはありません。 ref class C { int i; }; void func(C c) {} int main() { C c; C d; func(c); // エラー d = c; // エラー } キーワード value classで定義されたクラスは、コピーすることができ、そのコピーはビットワイズ、すなわちmemcpyのようなコピーです。 よって、value classにはこのようなコピーが可能な型しか含むことができません。すなわちref classで定義されたクラスのインスタンスを含むことはできません。 またvalue classはスタック上に作成することができます。ref classの場合はスタック上に作成したように見えても、実際はマネージヒープ上に作成されましたが、value classは本当にスタック上に作られます。 このような理由からも、value classにはref classのインスタンスを含むことができません。 また、value classは以下のものを持つことはできません。 * デフォルトコンストラクタ * コピーコンストラクタ * operator= * デストラクタ * ファイナライザー その他、継承もできません。(interfaceを除く)