ref new、gcnew (C++/CLI および C++/CX)ref new, gcnew (C++/CLI and C++/CX)

ref new 集計キーワードは、オブジェクトがアクセスできなくなったときにガベージ コレクションによって収集され、割り当てられたオブジェクトへのハンドル (^) を返す型のインスタンスを割り当てます。The ref new aggregate keyword allocates an instance of a type that is garbage collected when the object becomes inaccessible, and that returns a handle (^) to the allocated object.

すべてのランタイムAll Runtimes

ref new によって割り当てられた型のインスタンスのメモリは、自動的に解放されます。Memory for an instance of a type that is allocated by ref new is deallocated automatically.

ref new 演算では、メモリを割り当てることができない場合は OutOfMemoryException がスローされます。A ref new operation throws OutOfMemoryException if it is unable to allocate memory.

ネイティブ C++ 型のメモリの割り当てと解放の詳細については、「new 演算子と delete 演算子」を参照してください。For more information about how memory for native C++ types is allocated and deallocated, see the new and delete operators.

Windows ランタイムWindows Runtime

有効期間が自動的に管理される Windows ランタイム オブジェクトのメモリを割り当てるには、ref new を使用します。Use ref new to allocate memory for Windows Runtime objects whose lifetime you want to administer automatically. オブジェクトは、参照の最後のコピーがスコープ外になった後で参照カウントが 0 になると、自動的に解放されます。The object is automatically deallocated when its reference count goes to zero, which occurs after the last copy of the reference has gone out of scope. 詳細については、「Ref クラスと構造体」を参照してください。For more information, see Ref classes and structs.

要件Requirements

コンパイラ オプション: /ZWCompiler option: /ZW

共通言語ランタイムCommon Language Runtime

マネージド型 (参照型または値型) のメモリは gcnew によって割り当てられ、ガベージ コレクションによって解放されます。Memory for a managed type (reference or value type) is allocated by gcnew, and deallocated by using garbage collection.

要件Requirements

コンパイラ オプション: /clrCompiler option: /clr

使用例Examples

次の例では、gcnew を使用して Message オブジェクトを割り当てています。The following example uses gcnew to allocate a Message object.

// mcppv2_gcnew_1.cpp
// compile with: /clr
ref struct Message {
   System::String^ sender;
   System::String^ receiver;
   System::String^ data;
};

int main() {
   Message^ h_Message  = gcnew Message;
  //...
}

次の例では、gcnew を使用して、参照型のように使用するボックス化された値型を作成しています。The following example uses gcnew to create a boxed value type for use like a reference type.

// example2.cpp : main project file.
// compile with /clr
using namespace System;
value class Boxed {
    public:
        int i;
};
int main()
{
    Boxed^ y = gcnew Boxed;
    y->i = 32;
    Console::WriteLine(y->i);
    return 0;
}
32

関連項目See also

.NET および UWP でのコンポーネント拡張Component Extensions for .NET and UWP