ユーザ用ツール

サイト用ツール


サイドバー

C++/CLI

CLR

実用編

その他

cli:value_class

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を除く)




/var/www/html/virtual/cppcli/data/pages/cli/value_class.txt · 最終更新: 2013/12/23 09:08 (外部編集)