我有许多类(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
。您认为错误是由什么引起的?
答案 0 :(得分:0)
请在下次提供具有正确类别属性的完整功能样本。你的问题难以理解。但无论如何,这是你的错误:
您没有提供指针,您确实提供了参考:
E(X& x):D(x)
{
//do something
}
实际上你放弃了实例本身,而不是指针!在E
的生命周期结束时,E
内的所有实例都将被销毁,甚至X
。 C ++并不关心你在不同的地方引用了实例,因为C ++没有像引用计数器这样的东西。
使用
E(X *x):D(x)
{
//do something
}
我建议使用std::shared_ptr
。