删除在C ++ STL中包含向量的动态分配对象

时间:2010-04-19 20:21:36

标签: c++ stl

我有一个班级

class ChartLine{

protected:
        vector<Point> line; // points connecting the line
        CString name; //line name for legend        
        CPen pen; //color, size and style properties of the line
};

其中Point是结构

struct Point{
    CString x;
    double y;    
};

main()中,我使用ChartLine运算符动态分配new类型的对象。 如果我之后使用delete,默认析构函数~ChartLine()会正确地处理(或清除)成员ChartLine::line(即矢量顺便说一句),或者我必须在~ChartLine()中清除该向量手动?

提前致谢。 欢呼声。

4 个答案:

答案 0 :(得分:5)

隐式创建的析构函数将调用所有成员的析构函数(按照它们在类中声明的相反顺序。)vector将自行清理。您不需要自己定义析构函数。

这就是为什么你应该更喜欢与RAII结合使用自动分配。当对象清理自己时,您的代码更安全,更容易。提示:不要使用new和delete,把它放在智能指针中!

std::auto_ptr<int> p(new int(5));
boost::shared_ptr<int> p = boost::make_shared<int>(5);

这两个都会自动删除,现在你也是例外。 (注意,上面两个不做同样的事情。智能指针也有more types。)

答案 1 :(得分:2)

是的,当矢量被破坏时,矢量中的所有对象都会被销毁。从外观上看,你的代码应该按原样运行(虽然假设CString是MFC代码,但它的一些旧版本有一些内存泄漏......)

答案 2 :(得分:1)

在析构函数中唯一需要担心向量(或其他容器)的时候是它们是否包含指向对象的指针。因为在你的情况下不是这样,你应该没事。

答案 3 :(得分:0)

在您致电delete之后,您需要拨打new的唯一时间。其他一切都得到了处理。