1

私は C# のバックグラウンドを持っており、特に Windows Phone 8 プラットフォームで C++ を学んでいます。

多くのコード サンプル (SDK と共にインストールされます) は、Hat 演算子 ^ の使用法を示しています (ここを参照:帽子をかぶる型)。

例えば:

void PhoneDX::Initialize(CoreApplicationView^ applicationView)
{
    // ... function body
}

不思議なんだけど:

  • 特に Windows Phone 8 で、ほとんどのポインターがそのように定義されているのはなぜですか?

  • その構文は必須ですか?別のプラットフォーム (この構文を使用しない) の C++ ネイティブ ライブラリを使用しているとします。問題なく動作するはずですか?

4

2 に答える 2

3

ハットは、Windows ランタイム型を C++ コードから簡単に操作できるように設計された、コンパイラでサポートされているスマート ポインター型です。「帽子をかぶる型」とそのシリーズの他の記事で説明したように、C++/CX 言語拡張機能はオプションです。C++/CX を使用して記述できるコードは、言語拡張機能を使用せずに C++ で記述できます。コードの複雑さと冗長性。

ここで重要なのは、ハットが Windows ランタイム型を利用するコードを容易にするように設計されていることです。一般に、C++/CX および Windows ランタイム型の使用は、コンポーネントの境界に限定する必要があります。ほとんどのコードは、標準で移植可能な通常の C++ コードである必要があります。C++/CX は、(1) C++ コードをラップして Windows ランタイムを介して使用できるようにするため、および (2) コンポーネントから他の Windows ランタイム コンポーネントを使用するために使用する必要があります。

したがって、構文はオプションですが、Windows ランタイムの型で動作する必要があるコードを記述する場合は、構文の使用を強く検討する必要があります。通常の C++ コードを変更せずに使用できるはずですが、Windows ストア アプリと Windows Phone アプリは低い特権で実行され、一部の機能が利用できないという注意事項があります (たとえば、コンソールがないため、コンソール I/O は使用できません)。動作し、ランタイムは特殊なプロセスの有効期間管理機能を提供するため、呼び出しexitはお勧めできません)。

于 2013-01-11T01:22:28.770 に答える
1

(1) C# 参照から (4) C++/CX ハットへのやや複合的な飛躍であり、(2) C++ ポインター、(3) 参照カウント オブジェクトの途中で停止するため、理解するのが難しい場合があります。

^スマート ポインターは、標準 C++ の一部ではなく、Windows ランタイム型 (参照カウント型) を処理するための言語拡張機能です。

あなたのポイントに答える:

  • Windows Phone 8 でよく見られるのは、^ が Windows ランタイムの型に使用されているためです。これは、そのプラットフォームのサンプルでよく使用されます (サンプルはそのプラットフォームの API と機能を実証しようとしているため)。
  • そのライブラリには規則を使用する必要があり、それにはおそらく、それが定義する型 (独自のスマート ポインターがある場合) または標準/通常のポインター (*) または標準ライブラリ スマート ポインター (shared_ptr) を使用する必要があります。

これを理解するのに役立ついくつかの概念は、C++ オブジェクトの有効期間決定論的破壊(ガベージ コレクターが起動するのを待つことに対して)、参照カウントオブジェクトのスタック/静的対ヒープ/動的割り当てです

于 2013-01-11T01:29:34.777 に答える