gpt4 book ai didi

c++ - 不使用 gcnew 创建 C++/CLI 对象

转载 作者:行者123 更新时间:2023-11-27 23:51:28 24 4
gpt4 key购买 nike

在没有 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)称为stack semantics .

它旨在反射(reflect)在堆栈上创建对象的普通 C++ 功能。它还启用 RAII:如果您的对象实现了 IDisposable(或者在 C++/CLI 术语中,如果它具有析构函数),则当您离开时将调用其 Dispose(析构函数)方法它声明的范围(通常或通过异常传播)。就像调用普通的 C++ 析构函数一样。

在幕后,对象是在托管堆上创建的在任何一种情况下,甚至在堆栈语义下也是如此。

因此,对 RAII 使用堆栈语义有一个明显的好处。如果您的对象不是一次性的,您可能最终会得到更简洁的代码(您使用更少的 ^ 字符并使用 . 而不是 ->) 但它可能会使读者感到困惑。由您决定。

关于c++ - 不使用 gcnew 创建 C++/CLI 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46071971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com