не удается использовать " new "для ссылочного типа; вместо этого используйте "gcnew"? в VS 2005

Я использую язык C++ я получаю странную ошибку, когда я пытаюсь создать простой объект DataTable его давая ошибку

система::данные::объект DataTable* myDataTable = новый объект DataTable();

даже я пробовал это Система:: данные:: DataTable myDataTable = новый DataTable(); получение следующей ошибки, пожалуйста, помогите.

ошибка C2750: 'System::Data:: DataTable': невозможно использовать ' new 'для ссылочного типа; вместо этого используйте' gcnew ошибка c2440: 'инициализации' : не удается конвертировать из 'системы::данные::DataTable в *' к 'системе::данные::объект DataTable ^

1 ответов


язык, который вы используете называется C++ / CLI, а не простой C++. В C++ / CLI, вы можете получить доступ к .NET вещи, как DataTable. Семантика немного отличается от необработанных указателей:

DataTable^ myDataTable = gcnew DataTable;

"^" обозначает управляемая ручка. Под капотом, это указатель на объект в куче мусора. Вы не можете выполнять арифметику указателей на управляемых дескрипторах. Вы не delete их вручную. GC позаботится о них. Это также свободно перемещать объекты вокруг, если они не закреплены явно. gcnew используется для выделения объектов в управляемой куче. Он возвращает дескриптор, а не необработанный указатель. Вы не можете создавать ссылочные типы .NET в неуправляемой куче C++ с помощью new.