尽管使用了 boost::scoped_ptr,我们是否应该删除析构函数中成员的指针



最近我了解到使用智能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_ptrboost::shared_ptr等)

最新更新