这个指针和析构函数被调用

时间:2015-05-12 16:21:36

标签: c++

我有许多类(A,B,C,D,E,...)使用类X作为其构造函数参数之一。 以E类为例,其他类几乎相似

class E:public D
{
public:
   E(X& x):D(x)
   {
     //do something
   }
};

class X
{
   public:
      void func(int i) 
      {
         if(0==i)
         {
            //constructing other classes by passing in the *this pointer
         }//everything ends here even X
      }
};

在上面的类X中显示的条件块的末尾,X也被销毁。这就是我认为为什么在块结束后,我有一个错误的访问冲突和异常被抛出memory.xx文件@line 116

    void _Decref()
    {   // decrement use count
    if (_MT_DECR(_Mtx, _Uses) == 0)
        {   // destroy managed resource, decrement weak reference count
        _Destroy();
        _Decwref();
        }
    }

在每个类(A,B,C ......)中,我有几个类成员定义为shared_ptr。您认为错误是由什么引起的?

1 个答案:

答案 0 :(得分:0)

请在下次提供具有正确类别属性的完整功能样本。你的问题难以理解。但无论如何,这是你的错误:

您没有提供指针,您确实提供了参考:

E(X& x):D(x)
{
  //do something
}

实际上你放弃了实例本身,而不是指针!在E的生命周期结束时,E内的所有实例都将被销毁,甚至X。 C ++并不关心你在不同的地方引用了实例,因为C ++没有像引用计数器这样的东西。

使用

E(X *x):D(x)
{
  //do something
} 

我建议使用std::shared_ptr