从终结器访问违反非托管内存的行为

时间:2012-04-26 07:16:48

标签: c++ memory-management c++-cli finalizer unmanaged-memory

我试图从c ++ / cli终结器清理非托管类的内存,它给了我AcessViolation错误。我做这样的事情:

MyClass::!MyClass()
{

    if(_unmanaged)
    {
    _unmanaged->Delete();
    _unmanaged = 0;
    }
}

有谁知道,问题是什么?谢谢你的回答。

1 个答案:

答案 0 :(得分:0)

好的,我有一个猜测。

Finalizer从它自己的线程开始工作,所以当你试图手动处理你的对象时,可能会出现竞争条件。

我看到你对“已经删除的对象”的评论,但我会再次检查。

MyClass::~MyClass()
{
   this->!MyClass();

   GC::KeepAlive(this);
}