创建无GCNEW的C /CLI对象

Creating C++/CLI objects without gcnew

本文关键字:CLI 对象 GCNEW 创建      更新时间:2023-10-16

建议在没有gcnew的情况下创建本地C /CLI对象?string对象str1str2的哪些创建是正确的?

void foo()
{
    System::String str1("string 1");
    System::String^ str2 = gcnew System::String("string 2");
   // Do something with the strings 
}

创建一个没有gcnew的参考类型对象(ref class)称为堆栈语义。

这是指在堆栈上创建对象的普通C 功能。它还可以启用RAII:如果您的对象将实现IDisposable(或以C /CLI术语为destructor),则当您离开声明的范围(通常或通过异常传播)离开范围时,将调用其Dispose(destructor)方法。就像普通的C 破坏者一样。

在引擎盖下,该对象是在托管堆上创建的,即使在堆栈语义下也是如此。

因此,使用RAII的堆栈语义有一个明显的好处。如果您的对象不可一次性,则您的 May 最终会以较少的代码(您使用较少的^字符并使用.而不是->),但可能会使读者感到困惑。这是您的电话。