QScopedPointer是可以自动回收局部动态内存分配的对象的。
其效果相当于如下所示:
就是我们局部定义了一个动态内存分配的对象之后,以往需要我们自己手动去删除的,而现在你就可以直接交给QScopedPointer了。
void myFunction(bool useSubClass)
{
MyClass *p = useSubClass ? new MyClass() : new MySubClass;
QIODevice *device = handsOverOwnership();
if (m_value > 3) {
delete p;
delete device;
return;
}
try {
process(device);
}
catch (...) {
delete p;
delete device;
throw;
}
delete p;
delete device;
}
另一个例子则是如何在类定义中使用QScopedPointer,
完整代码见:comapp.zip:
class Document