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 Блок, сборщик мусора может свободно перемещать вещи снова. Что вы пытаетесь достичь здесь? Возможно, вы хотите использовать указатель элемента в списке вместо указателя?

Другие вопросы по тегам