1.局部栈区对象-----------生命周期作用域结束
#include<iostream>
using namespace std;
class CPerson
{
public:
CPerson()
{
cout << "CPerson::CPerson" << endl;
}
~CPerson()
{
cout << "CPerson::~CPerson" << endl;
}
};
int main
{
CPerson ps;
}
调用析构函数的步骤,先进入return,再进入析构,最后进入大括号。
2.堆区的指针对象------------生命周期遇到了delete
#include<iostream>
using namespace std;
class CPerson
{
public:
CPerson()
{
cout << "CPerson::CPerson" << endl;
}
~CPerson()
{
cout << "CPerson::~CPerson" << endl;
}
};
int main()
{
CPerson *ps = new CPerson;
delete ps;
ps = 0;
return;
}
生命周期结束是要手动调用delete,否则这个对象不会调用析构函数。
3.全局-----------生命周期程序结束 程序退出(即大括号之后)调用析构
#include<iostream>
using namespace std;
class CPerson
{
public:
CPerson()
{
cout << "CPerson::CPerson" << endl;
}
~CPerson()
{
cout << "CPerson::~CPerson" << endl;
}
};
CPerson ps;
int main()
{
}
4.临时对象----------生命周期只有一行
#include<iostream>
using namespace std;
class CPerson
{
public:
CPerson()
{
cout << "CPerson::CPerson" << endl;
}
~CPerson()
{
cout << "CPerson::~CPerson" << endl;
}
};
int main()
{
CPerson();
}
调用构造,析构
5.函数返回值的
#include<iostream>
using namespace std;
class CPerson
{
public:
CPerson()
{
cout << "CPerson::CPerson" << endl;
}
~CPerson()
{
cout << "CPerson::~CPerson" << endl;
}
};
CPerson show()
{
CPerson pp;
return pp;
}
int main()
{
CPerson ps;
ps = show();
}
malloc free :分配空间,释放空间
也可以调用构造,析构,但是要手动调用(类名和作用域)
ps ->CPerson::cperson();
ps ->CPerson::~cperson();
new delete :分配空间,释放空间,触发构造,析构