C# небезопасные поля указателя
Это сломается? Он компилируется нормально, но на основе показаний, я не уверен, гарантировано ли, что _ptRef всегда будет указывать на структуру, указанную в конструкторе.
Я думаю, под 'break' я имею в виду... GC переместит структуру, на которую указывает указатель (_ptRef)?
public unsafe class CPointType0
{
private PointType0* _ptRef = null;
public CPointType0(ref PointType0 spt)
{
fixed (PointType0 * pt = &spt)
{
_ptRef = pt;
}
}
...a bunch of property accessors to fields of _ptRef (accessed as return _ptRef->Thing) }
Сценарий
-PointType0 является структурой.
-Миллионы PointType0 в памяти в структуре данных. Раньше это были ссылочные типы, но слишком много нехватки памяти.
-Список возвращается только тогда, когда операция поиска находит соответствующий PointType0, и этот список передается и обрабатывается много.
1 ответ
Это небезопасно.
После того, как код покидает fixed
Блок, сборщик мусора может свободно перемещать вещи снова. Что вы пытаетесь достичь здесь? Возможно, вы хотите использовать указатель элемента в списке вместо указателя?