最近、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 の助けを借りてメモリ リークを起こしているようです。私はそれについてかなり混乱しています。スマート ポインターを使用する場合、削除は不要ということですか (解放されたメモリを 2 回目に削除するのでしょうか? それについてはわかりません)、コードはどのようにクラッシュしますか?