この文書の現在のバージョンと選択したバージョンの差分を表示します。
cli:value_class [2009/01/31 12:41] admin 作成 |
cli:value_class [2013/12/23 09:08] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== value class ====== | ||
- | |||
- | C++のクラスは、= や実体による引数の受け渡しによってコピーできます。ref classで定義されたクラスはoperator= や コピーコンストラクタをもたない場合勝手にコピーされることはありません。 | ||
- | <code cpp> | ||
- | ref class C { | ||
- | int i; | ||
- | }; | ||
- | void func(C c) {} | ||
- | int main() | ||
- | { | ||
- | C c; | ||
- | C d; | ||
- | func(c); // エラー | ||
- | d = c; // エラー | ||
- | } | ||
- | </code> | ||
- | キーワード value classで定義されたクラスは、コピーすることができ、そのコピーはビットワイズ、すなわちmemcpyのようなコピーです。 | ||
- | |||
- | よって、value classにはこのようなコピーが可能な型しか含むことができません。すなわちref classで定義されたクラスのインスタンスを含むことはできません。 | ||
- | |||
- | またvalue classはスタック上に作成することができます。ref classの場合はスタック上に作成したように見えても、実際はマネージヒープ上に作成されましたが、value classは本当にスタック上に作られます。 | ||
- | |||
- | このような理由からも、value classにはref classのインスタンスを含むことができません。 | ||
- | |||
- | また、value classは以下のものを持つことはできません。 | ||
- | |||
- | * デフォルトコンストラクタ | ||
- | * コピーコンストラクタ | ||
- | * operator= | ||
- | * デストラクタ | ||
- | * ファイナライザー | ||
- | その他、継承もできません。(interfaceを除く) |