文章目录
前言
先看代码
#include <iostream>
using namespace std;
struct Person {
int m_age;
//用来做初始化的工作
Person() {
m_age = 0;
cout << "Person::person()" << endl;
}
//用来做内存清理的工作,内部产生的堆空间
~Person() {
cout << "~Person::person()" << endl;
}
};
int main()
{
//栈空间
{
Person person;
//栈空间内存自动回收,不需要在析构函数中清理成员变量
}
//堆空间
{
Person* p0 = new Person;
//堆空间内存需要手动回收
}
getchar();
return 0;
}
out是
Person::person()
~Person::person()
Person::person()
内部产生的堆空间,需要内部进行清理
#include <iostream>
using namespace std;
struct Car {
int m_price;
Car() {
m_price = 0;
cout << "Car::car()" << endl;
}
~Car() {
cout << "~Car::car()" << endl;
}
};
struct Person {
//Person对象里有两个成员变量,一个是m_age,一个是Car*指针,存放在栈空间
int m_age;
Car* m_car;
//用来做初始化的工作
Person() {
m_age = 0;
m_car = new Car(); //堆空间的Car对象
cout << "Person::person()" << endl;
}
//用来做内存清理的工作,内部产生的堆空间
~Person() {
delete m_car;//回收堆空间
cout << "~Person::person()" << endl;
}
};
int main()
{
{
Person person;
}
getchar();
return 0;
}
out为
Car::car()
Person::person()
~Car::car()
~Person::person()