C++ cli c++/cli使用gcnew创建本机类型

C++ cli c++/cli使用gcnew创建本机类型,c++-cli,C++ Cli,我是c++/cli新手,对这个新的vs gcnew感到困惑 我知道使用gcnew创建的对象将被垃圾收集,而使用new创建的对象不会被垃圾收集 < >我甚至在某些地方读到,应该用新的方式创建本机C++类型。为什么会这样?因为我们甚至可以用gcnew创建本机类型,而不用管理它们。这难道不比使用“新建”来管理对象更容易吗?不,不能使用gcnew来创建本机类型。垃圾收集器需要知道指向特定对象的指针存在的每个位置,以便确定对象是否可访问,并在压缩期间调整这些指针 指向本机类型的指针可以放在任何地方,对垃圾

我是c++/cli新手,对这个新的vs gcnew感到困惑

我知道使用gcnew创建的对象将被垃圾收集,而使用new创建的对象不会被垃圾收集


< >我甚至在某些地方读到,应该用新的方式创建本机C++类型。为什么会这样?因为我们甚至可以用gcnew创建本机类型,而不用管理它们。这难道不比使用“新建”来管理对象更容易吗?

不,不能使用
gcnew
来创建本机类型。垃圾收集器需要知道指向特定对象的指针存在的每个位置,以便确定对象是否可访问,并在压缩期间调整这些指针

指向本机类型的指针可以放在任何地方,对垃圾收集器不可见,因此垃圾收集是不可能的


但是,很少应该使用
new
创建本机类型的实例。如果生存期有限,请使用局部变量或使其成为类成员。这不是Java。

Ben,我可以做这个char^ptr=gcnew char[100];而且它可以正常构建。char不是本机类型吗?@chappar:它是一个基元类型,基元类型在C++/CLI中具有双重标识。但实际上,这不应该起作用,因为
char[100]
是一种本机类型(托管的等价物是
cli::array