由于RAII,C ++中没有final块。现在,如果我有一个指针对象,并且方法之一发生异常,该对象将如何删除?这是我编写的示例代码。
class A
{
public:
A()
{
cout<<"I am inside A\n";
}
virtual void mymethod()
{
throw 0;
}
virtual ~A()
{
cout<<"A destroyed\n";
}
};
class B : public A
{
public :
//A a;
B()
{
cout<<"I am inside B \n";
}
virtual void mymethod()
{
throw 0;
}
~B()
{
cout<<"B destroyed\n";
}
};
int _tmain(int argc, _TCHAR* argv[])
{
try
{
A *b = new B();
b->mymethod();
delete b;
}
catch (int i)
{
cout<<"exception";
}
return 0;
}
现在在此如何删除指针对象(b)。
首先,所有多态类型都应具有虚拟析构函数。
其次,当您使用拥有原始指针时,基本上可以禁用RAII。
解决方案是使用智能指针:
unique_ptr
。这将是不可复制的。shared_ptr
。这将进行浅表复制。clone_ptr
。这将进行深度复制。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句