C++/CLI

読み:スィープラスプラス・スィーエルアイ
外語:C++/CLI 英語
品詞:名詞

.NET Framework用仮想計算機、共通言語基盤(CLI)上で動作する、C++を拡張したC++の上位互換プログラミング言語。ECMA-372として標準化されている。

目次

それ以前、MicrosoftはC++の独自拡張として「C++マネージ拡張」をVisual Studio .NET 2002から提供した。

これがさらに改訂された結果、独自のプログラミング言語としてC++/CLIがVisual Studio 2005から提供開始となった。これは、Visual C++ 2005以降でコンパイルすることが出来る。

C++の独自拡張だった「C++マネージ拡張」と比較し、より分かりやすい構文が導入され、書きやすさと可読性が向上している。

MicrosoftのC++拡張には他にC#があるが、C#よりはC++に近い。

構文

C++マネージ拡張は、C++の独自拡張を加えた上位互換仕様だった。マネージ拡張とは、簡単にはガベージコレクション機能である。

C++/CLIも同様にC++の上位互換だが、一つのプログラミング言語であり、C++に対し、様々な機能拡張や仕様の変更が行なわれている。

特に顕著な仕様差は、.NETの参照型に関するものである。

ハンドル

旧C++マネージ拡張ではこれはC++のそれと同様にポインターと呼ばれ、C++のポインターを__nogcポインター、.NETの参照型オブジェクトを指すポインターを__gcポインターと呼んだ。ガベージコレクションの有無をそのまま表わしている。

C++/CLIでは、.NETの参照型オブジェクトを指すものをハンドルと呼び、ポインターはC++のもののみとなった。

C++/CLIのハンドルは "クラス名 ^"で表現される。従来のクラスは "クラス名 *" なので、ベージコレクションの有無が分かりやすくなった。

また、ポインター演算子&に対してC++/CLIではハンドル演算子の%が用意された。オブジェクトそのものではなく、オブジェクトの参照(ハンドル)を得る必要がある場合、ハンドル演算子%を使用する。

組み合わせて、追跡参照(トラッキング参照)として "^%" という構文も利用できる。

ファイナライザー

デストラクターはオブジェクトが消滅するときに呼ばれる処理だが、C++/CLIにはこの他にガベージコレクションが存在し、両方が使用される。そこでC++/CLIでは、ガベージコレクション時に呼び出される処理をファイナライザーと呼び分けている。

デストラクターは従来のC++もC++/CLIも~クラス名()だが、C++/CLIのファイナライザーは!クラス名()となる。

旧C++マネージ拡張やC#では、virtual void Finalizeという名前が使われていたが、C++/CLIは新たなプログラミング言語として、仕様が拡張されているのである。

なお、~は1の補数演算子(ビット演算の論理否定演算子)、!はその変数等のビット列全体を対象とした論理否定演算子である。

関連する用語
C++

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club