在C++中,学习者通常会学习到基本的构造函数以及析构函数,但是对于很多初学者来说,大多数对于析构函数的调用时机没有一个确切的把握。
就以下列的例子来说明:
#include<iostream>
using namespace std;
class classw
{
char s;
public:
classw() { cout << "YOU"; };
classw(char s) { cout << s; };
~classw() { cout << 'A'; };
};
int main()
{
classw p1,*p2;
p2 = new classw(’E');
delete p2;
system("pause");
return 0;
}
你觉得程序最后会输入多少?
答案是YOUEA。
首先我们定义了P1对象,所以这里会导致直接调用classw这个构造函数从而输出“YOU”,又因为我们new了“ME”交给p2这个指针管理,所以此时会输出ME,最后由于delete直接导致调用析构函数输出“A”。
这里值得注意的点就是这里的delete会直接导致调用析构函数。
还需要注意这里有一个system("pause"),所以我们不能够简单的认为程序最后会输入YOUMAA。(p1对象在程序结束后会被释放调用析构函数,从而又会输出一个‘A’。)
我们需要注意一下析构函数的调用时机问题:
相信看到这里您一定明白啦~
您的点赞评论是对我最大的支持,在CSDN上面的第一篇嘿嘿。