не может использовать «новый» для ссылочного типа; использовать вместо этого «gcnew»? в VS 2005 - PullRequest
7 голосов
/ 25 августа 2009

Я использую язык 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 ^

»

1 Ответ

12 голосов
/ 25 августа 2009

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

DataTable^ myDataTable = gcnew DataTable;

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

...