我有一个班级
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()
中清除该向量手动?
提前致谢。 欢呼声。
答案 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
的唯一时间。其他一切都得到了处理。