web-dev-qa-db-ja.com

C ++ / CLIでは、帽子の文字^は何をしますか?

私はIvorHortonのBeginningVisual C++ 2008を読んでいましたが、そのCLRの例の多くにはmainの次の定義があります。

_int main(array<System::String ^> ^args)
_

私は本の最初にページごとに戻って、それが実際に何を意味するのかを説明した最初のそのようなインスタンスを見つけましたが、見つけることができませんでした。

明らかに、それは標準のint main(int argc, char *argv[])と同じ意味ですが、その_^_が実際に使用されるのはいつ、なぜ、そしてなぜそれが存在するのかを知りたいのです(_*_および参照_&_は表すことができません)?

42
Tuminoid

これはマネージポインターです。*はアンマネージされているオブジェクトへのポインターを示し、^はガベージコレクションされたオブジェクト(フレームワークによって処理される)を指します。 .NETでのポインタの処理方法の詳細については、 this を参照してください。

42
Saulius Valatka

それに加えて、C++/CLIでは、マネージポインターは通常のポインターとは別に処理されるため、別のキーワードを割り当てて割り当てることもできます。

NativeObject* n = new NativeObject();
ManagedObject^ m = gcnew ManagedObject();

管理対象オブジェクトとネイティブオブジェクトはまったく異なるものであり、それらを混在させることはできません(まあ、簡単ではありません)。

20
Ray Hidayat

詳細については、これを参照してください: http://msdn.Microsoft.com/de-de/library/yk97tc08.aspx

管理ヒープ上のオブジェクトへのハンドルは、オブジェクトのメンバーではなく、「オブジェクト全体」を指します。

0
ng5000