使用new运算符动态分配了内存空间,则在析构函数中应该使用delete释放掉这部分占用的空间。
析构函数没有参数也没有返回值,仅当类对象销毁时调用析构函数。
当程序先后创建几个对象时,系统按照后建先析构的原则析构对象,当使用delete调用析构函数时,则按照delete的顺序析构。
例如: Student* dd = new Student[2]; delete []dd;
代码:
#include<iostream> #include<string> using namespace std; class myDate { public: myDate(); //构造函数 ~myDate(); //析构函数 myDate(int, int, int); //构造函数 void setDate(int, int, int); //设置日期 void setDate(myDate); //设置日期 myDate getDate(); //获取日期 void setYear(int); //设置年 int getMonth(); //获取月 void printDate() const; //打印日期 private: int year, month, day; //成员变量,表示年、月、日 }; // 在类体外定义成员函数 myDate::myDate() { year = 1970, month = 1, day = 1; cout << "myDate构造函数1" << endl; } myDate::~myDate() { cout << "myDate析构函数" << endl; } myDate::myDate(int y, int m, int d) { year = y; month = m; day = d; } void myDate::setDate(int y, int m, int d) { year = y; month = m; day = d; return; } void myDate::setDate(myDate oneD) { year = oneD.year; month = oneD.month; day = oneD.day; return; } myDate myDate::getDate() { return *this; } void myDate::setYear(int y) { year = y; return; } int myDate::getMonth() { return month; } void myDate::printDate() const { cout << year << "/" << month << "/" << day; return; } class Student { public: Student(); //构造函数 ~Student(); //析构函数 Student(const Student& s); //复制构造函数 void setStudent(string, myDate); //设置学生信息 void setName(string); //设置姓名 string getName(); //获取姓名 void setBirthday(myDate); //设置生日 myDate getBirthday(); //获取生日 void printStudent() const; //打印信息 private: string name; //姓名 myDate birthday; //生日 }; // 在类体外定义成员函数 Student::Student() :name("NoName"), birthday(myDate()) {}; //Student复制构造函数 Student::Student(const Student& s) { name = "copy" + s.name; birthday = s.birthday; cout << "Student复制构造函数" << endl; } //Student析构函数 Student::~Student() { cout << "Student析构函数" << endl; } void Student::setStudent(string s, myDate d) { name = s; birthday.setDate(d); return; } void Student::setName(string n) { name = n; return; } string Student::getName() { return name; } void Student::setBirthday(myDate d) { birthday.setDate(d); return; } myDate Student::getBirthday() { return birthday; } void Student::printStudent() const { cout << "姓名:" << name << "\t生日:"; birthday.printDate(); //调用类myDate的成员函数 cout << endl; } int main() { //构造顺序 从内到外 Student stud; stud.printStudent(); Student sy[2] = { Student(),stud }; for (int i = 0; i < 2; i++) { sy[i].printStudent(); } cout << endl << endl << endl; //指针函数数组与delete语句 Student* ss[2] = { new Student(),new Student() }; for (int i = 0; i < 2; i++) { ss[i]->printStudent(); } Student* dd = new Student[2]; delete []dd; }
运行结果: