最近我了解到使用智能ptr可以使我们的工作更轻松。我试图在我的代码中添加 boost::scoped_ptr。但是,我不确定是否应该删除指向类的指针。这是我的代码:
class onTimeStepOp : public QWidget
{
public:
//some function here
~onTimeStepOp(){delete xr;}
private:
xmlReader *xr;
//others.
};
for(int i = m; i >= 1; --i) {
boost::scoped_ptr<onTimeStepOp> otso(new onTimeStepOp(
QString::number(currentFrameNum - i),
QString::number(currentFrameNum)
));
//do something here.
}
似乎 otso 会在作用域结束时调用其析构函数。所以我将析构函数添加到类中。程序在运行后崩溃。但是,如果没有析构函数,该程序似乎在 Valgrind 的帮助下泄漏了内存。我对此很困惑。这是否意味着删除是不必要的(可能是第二次删除释放的内存?我不确定)使用智能指针时,代码如何崩溃?
智能指针只会调用它所持有的实例的析构函数。如果该实例碰巧有其他动态分配的成员,则不会自动清理这些成员(除非您也将它们保存在智能指针中!
因此,在您的情况下,将成员也放在智能指针中(boost::scoped_ptr
或boost::shared_ptr
等)