最近我了解到使用 smart 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 的帮助下泄漏内存。我对此很困惑。这是否意味着使用智能指针时不需要删除(可能是第二次删除释放的内存?我不确定)以及代码如何崩溃?