渡邊誠人
新機能から理解する
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()
{
