不能在引用类型上使用'new'; 使用'gcnew'代替?在VS 2005中

Sac*_*hin 7 ado.net visual-studio-2005 c++-cli

我正在使用C++语言当我尝试创建一个DataTable的简单对象时,我会收到一个奇怪的错误

System :: Data :: DataTable*myDataTable = new DataTable();

甚至我试过这个System :: Data :: DataTable myDataTable = new DataTable(); 得到以下错误请帮助.

错误C2750:'System :: Data :: DataTable':不能在引用类型上使用'new'; 使用'gcnew'代替错误C2440:'initializing':无法从'System :: Data :: DataTable*'转换为'System :: Data :: DataTable ^

Meh*_*ari 12

您使用的语言称为C++/CLI,而不是普通的C++.在C++/CLI中,您可以访问.NET之类的东西DataTable.语义与原始指针略有不同:

DataTable^ myDataTable = gcnew DataTable;
Run Code Online (Sandbox Code Playgroud)

" ^"表示托管句柄.在引擎盖下,它是指向GC堆上的对象的指针.您不能对托管句柄执行指针运算.你不是delete他们手动.GC会照顾他们.除非明确地固定它们,否则它也可以自由移动物体.gcnew用于在托管堆上分配对象.它返回一个句柄,而不是一个原始指针.您无法在非托管C++堆上使用创建.NET引用类型new.