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

标签 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:“初始化”:无法从“System::Data::DataTable *”转换为“System::Data::DataTable ^

最佳答案

您使用的语言称为 C++/CLI ,而不是普通的 C++。在 C++/CLI ,您可以访问 .NET 内容,例如 DataTable。语义与原始指针有点不同:

DataTable^ myDataTable = gcnew DataTable;

^”表示 managed handle 。在底层,它是一个指向 GC 堆上对象的指针。您不能对托管句柄进行指针算术。您不能手动删除它们。 GC 会处理它们。除非明确固定对象,否则还可以自由移动对象。 gcnew用于在托管堆上分配对象。它返回一个句柄,而不是原始指针。您无法使用 new 在非托管 C++ 堆上创建 .NET 引用类型。

关于ado.net - 不能在引用类型上使用 'new';使用 'gcnew' 代替?在VS 2005中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327826/

相关文章:

opencv - 将array <System:Byte> ^转换为Mat

visual-studio - 当远程计算机上未安装 VS 时,使用 CRT 的 DEBUG 版本远程调试应用程序

java - Visual Studio - 不中断 J# 中的 Java 异常

c++ - 如何在 VS2005 中提高大型 C++ 应用程序的链接性能

c# - 循环 System.Data.Objects.DataClasses.EntityCollection

c# - 如何异步使用 DataAdapter.Fill()?

sql - 使用VB写入大量记录 Access

.net - C++/cli 识别托管/非托管之间的转换并测量其成本

带有参数占位符的 C# SQLite 查询字符串

c# - 使用 ADO.NET 实体数据模型,如何传递(或设置)连接字符串密码?