Я недавно увидел пару проектов с открытым исходным кодом, которые на самом деле это делают; верните небезопасный указатель из функции, такой как: «int * input = this.someIterator.GetUnsafePtr()».Почему разрешено возвращать небезопасные указатели внутри функции?
Из моего понимания это должно быть совершенно неправильно. Небезопасные указатели могут быть получены только с помощью «фиксированных» заявлений, и, конечно, те, которые возвращаются из функции, больше не будут закреплены (они «потеряют» свою область объявления), в результате чего они, в конечном счете, будут собраны в мусор.
Но тогда я не помню, чтобы компилятор также предупреждал об этом, так зачем же использовать фиксированный оператор, если на самом деле у вас есть «незакрепленные» указатели?
IntPtr не является указателем отслеживания. Если IntPtr ссылается на управляемый объект и этот объект перемещается, указатель не обновляется. Нет никакой реальной разницы между IntPtr и небезопасным указателем, отличным от того, что IntPtr является CLS-совместимым, а не «небезопасным». –
Вы правы, спасибо. Я думаю, что мне нужно снова прочитать о CLR. – zihotki