我们用构造函数去初始化一个对象的时候,会分配一段空间A,构造函数的作用是对这段空间进行初始化的操作,并不是创建了这段空间。
在调用析构函数的时候,并不是去释放空间A。在空间A中可能会包含多个变量指向别的空间B、空间C,析构函数的作用是去释放空间B、C。
看一个示例:
1. class Stu{ 2. 3. public: 4. Stu() 5. { 6. name = new char[100]; 7. } 8. ~Stu() 9. { 10. delete name; 11. } 12. 13. public: 14. char * name; 15. int age; 16. } 17. 18. int main(void) 19. { 20. Stu *stu_ = new Stu; 21. 22. delete stu_; 23. 24. return 0; 25. }
1. Stu stu_ = new Stu; 创建stu_对象,自动调用构造函数。
stu_是指针,4个字节
*stu_是Stu类型变量,分配8个字节
在构造函数中调用name = new char[100]; 分配100个字节
2. 析构函数只是销毁在构造函数中分配的空间。