当我们新建一个类的实例时,构造函数会被调用,当我们这个实例被销毁时,析构函数被调用。构造函数是将需要用到的东西进行初始化,那么同样的,析构函数是与初始化相反的过程,用来清空内存以便于接下来使用。对应的,如果使用new来申请空间,那么需要用delete来进行析构,如果只是基于堆栈来进行空间申请,那么当实例被删除的时候,析构函数就会被调用。
#include<iostream> class Entity { public: float X,Y; Entity() { X=0.0f; Y=0.0f; std::cout<<"Created Entity!"<<std::endl; } ~Entity() { std::cout<<"Destoryed Entity!"<<std::endl; } void Print() { std::cout<<X<<","<<Y<<std::endl; } }; void Function() { Entity e; e.Print(); } int main() { Function(); std::cin.get(); }
设置断点进行单步调试会发现,当执行语句Entity e时,调用构造函数,当执行完Function()后,调用析构函数。析构函数与可以手动执行,,将Function函数如下修改
void Function() { Entity e; e.Print(); e.~Entity(); }
但是手动调用其实并不常见。