2

这是要破了吗?它编译得很好,但根据读数,我不确定它是否保证 _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时才返回一个List,并且这个List被传来传去,被操作了很多。

4

1 回答 1

6

这不安全。

代码离开fixed块后,垃圾收集器可以自由地再次移动东西。你想在这里完成什么?您是否可能想使用列表中项目的索引而不是指针?

于 2012-05-25T03:08:17.460 回答