关于C++中析构函数的一些易错点

在C++中,学习者通常会学习到基本的构造函数以及析构函数,但是对于很多初学者来说,大多数对于析构函数的调用时机没有一个确切的把握。

就以下列的例子来说明:

#include
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’。)

我们需要注意一下析构函数的调用时机问题:

关于C++中析构函数的一些易错点_第1张图片

相信看到这里您一定明白啦~

您的点赞评论是对我最大的支持,在CSDN上面的第一篇嘿嘿。

你可能感兴趣的:(c++,c语言)