18

C++11 では、ガベージ コレクターへのインターフェイスが導入されました。私が見たところ、GC と通信するための標準化された方法 (たとえば、 declare_no_pointers ) を提供し、偽装ポインターがどのように処理されるかについての情報を取得します (たとえば、get_pointer_safety )。

ただし、C++11 には、手動で解放する必要のない未加工のメモリ ブロックを割り当てる標準化された方法がまだありません。デストラクタが呼び出されなくても、それが役立つユースケースがあります。1 つの例は、複雑なクリーンアップ プロトコルに対処する必要なく、(Herb Sutter が言及したように) 効率的な同時データ構造を実装することです。

ここまでは順調ですね。私の質問 (GC ライブラリ開発者ではなく、通常の開発者の観点から):

新しい C++11 GC インターフェースが役に立った実際の例はありますか?

少なくとも私の観点からは、世界は変わっていません。GC が必要な場合でも、Boehm GCなどの非標準ライブラリを見つけて、それを統合して使用する方法を学ぶ必要があります。新しい標準化されたインターフェースは、その点ではあまり役に立ちません。また、移植性の問題も解決しません。

(長期的には、C++11 標準で定義された共通インターフェイスがうまくいくことを願っています。ただし、私の質問は、近い将来のみを対象としています。)

4

2 に答える 2

10

いいえ、当面はこの API を完全にサポートするコンパイラがないため、C++11 GC インターフェイスの実用的な使用法はありません。また、C++11 標準ではこの API をオプションとして宣言しており、主要なコンパイラで実装する動きは見られません (ただし、Jesse Good が MSVC で既にサポートしていると述べているように)。

関連情報があるこの投稿も参照してください

于 2013-08-01T22:05:20.397 に答える