QScopedPointer
QScopedPointer模版类可以指向一个动态分配内存的对象,而且可以通过调用自身的析构函数删除其所指向的对象。用C++的程序员都知道,人为的管理在堆上动态分配内存的对象是比较麻烦而且也很容易引发错误的,常见问题的就是会引发内存泄漏又难以维护。QScopedPointer作为一个小而实用的工具类,它通过基于堆栈的内存实现对于在堆上分配的内存的所有权,即所谓的资源获取即初始化((RAII),从而大量简化我们的工作。QScopedPointer能保证对象在离开当前作用域时被删除,如此便可以保证不会出现内存泄漏的情况。QScopedPointer没有复制构造函数和赋值函数。QScopedPointer所起的作用其实就跟C++ STL中的智能auto_ptr一样的。
看看下面的代码,
void myFunction(bool useSubClass)
{
MyClass *p = useSubClass ? newMyClass() : 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;
}
它动态分配了一个对象,有几个退出点,为了不出现内存泄漏,我们必须在每个可能的退出点删除对象,delete p;
这样的代码看起来让人有点不舒服,如果我们用QScopedPointer,那就简单得多了
void myFunction(bool useSubClass)
{
// assuming that MyClass has avirtual destructor<