【发布时间】:2014-08-01 18:57:13
【问题描述】:
class Point
{
public:
float x,y;
Point() {}
Point(float,float);
Point operator + (Point);
Point operator * (double);
void rotate_p(float);
void render_p(Point*);
void sub(float);
float get_dist();//get_distance
};
你可以看到这个类没有指针作为非静态 数据成员,所以我想我可以使用默认的析构函数;这准确吗?
问题
- 什么时候需要声明自己的析构函数?
【问题讨论】:
-
不,您不需要提供析构函数,但您可能需要确保
x和y在默认构造函数中初始化为零。 -
请注意,这不是当你有指针的时候。当对象被破坏时,您需要清理某些东西或以其他方式做某事。当您使用拥有资源的原始指针时,通常会发生这种情况。
-
如果你想从
Point继承并在Point* p指针中存储派生类型的堆分配对象,你需要定义一个虚拟析构函数。否则,在删除p时不会调用派生对象的析构函数。并且可能在派生对象中管理了一些内存。 -
@Tobias 严格来说,您需要虚拟析构函数通过指向基类的指针对派生类型对象调用 delete。
-
@juanchopanza 更好:...通过指向基类的指针调用派生类型对象上的析构函数。
标签: c++ class destructor