渡邊誠人
新機能から理解する
C++/CLI 研究
ガイド
書誌
author | 渡邊誠人 |
publisher | ソフトバンク |
year | 『C MAGAZINE 2005.4』p.46-54 |
履歴
editor | 唯野 |
2005.12.24 | 読了 |
2005.12.28 | 公開 |
2007.2.9 | 修正 |
C++/CLI は VC2003 でのマネージ拡張を更に推し進めたものである。そのため .net Framework プログラミングにおける C++ 言語拡張といってしまえばそれまでとなるが、C++/CLI では C# と並び標準化をも意識している──正しくはマネージ拡張の標準化作業版が C++/CLI なのだということである。C++ の拡張性を維持したまま Java などの便利な点を取り込んだといってしまっては乱暴か。しかし、GC、interface、Generic (= template)、finally キーワードなどは Java と同様である。これ以外では列挙型クラス/構造体、イベントハンドラ/オーバーライド専用を含む新しいキーワード(予約語)などが含まれている。
かくいう私もマネージ拡張や C# は MS だけのプロプライエタリな技術としか思っていなかった。しかし、C++/CLI は現状の肥大化した C++ に対する目指すべきひとつの方向性だと思う。コンピュータの歴史においては、基本的に複雑化しすぎたもの(学習曲線のきつくなり過ぎたもの)は延命できないという定理(というのはいいすぎかもしれないが)がある。プログラミング言語として最もつぶしの効くのが C++ だと信じる私としては、この動きは素直に歓迎したいと思う。
ちなみに VS2005 Express Editon が無償で DL 可能になっているが、以下の内容を実際に走らせてまではいない。私が基本的に VC よりも BCB 使いということもあるが、MFC/ATL を含まないため別途 Platform SDK が必要であるなど、手順が面倒そうなためである。
2007.2.9 補足
念のため補足しておくと C++/CLI は、あくまでも .net Framework に対する C++ 用インタフェースであるため、あくまでも実行は CLR を介して行われる。そのためパフォーマンスは期待できない。
抄録
47-48
ref 修飾子を付与してクラスや構造体を宣言するとガベージコレクション(GC)の対象となる。GC の対象となったオブジェクトは明示的な delete が不要で、new の代わりに gcnew を使う。ガベージコレクションはオブジェクトがスコープを抜けた時点で行われ、もちろんデストラクタも呼び出される。また、GC 使用を明示するために handle 型であることを示す ^ (ハット)をポインタ型の * (アスタリスク)のように使用する。逆に値を直接含むリファレンスでない型(GC の不要な型)であることを明示したい場合は value を付与する。
// ref ref class X // GC 対象クラス { public: int i; int getX(){return i;} }; int main() { X^ px; // handle型 px = gcnew X; // インスタンスの生成 px->i = 100; int x = px->getX(); }
// value #include "stdafx.h" using namespace System; value struct V // GC 不要の型 { int i; } int _tmain() {