ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C/C++编程笔记:私有化析构函数,示例分析

2021-04-30 15:03:15  阅读:130  来源: 互联网

标签:函数 示例 C++ private 析构 Test include class


首先我们来看一下下面这个程序的输出:

#include <iostream>

using namespace std;

class Test {

private:

~Test() {}

};

int main()

{

}

上面的程序可以编译并正常运行。因此,我们可以说:不是创建私有析构函数编译器错误。

现在,您对下面的程序怎么说?

#include <iostream>

using namespace std;

class Test {

private:

~Test() {}

};

int main()

{

Test t;

}

上面的程序编译失败。编译器注意到,因为析构函数是私有的,所以无法破坏局部变量“ t”。

现在,下面的程序呢?

#include <iostream>

using namespace std;

class Test {

private:

~Test() {}

};

int main()

{

Test* t;

}

上面的程序工作正常。没有正在构造的对象,程序仅创建“ Test *”类型的指针,因此不会破坏任何内容。

接下来,下面的程序呢?

#include <iostream>

using namespace std;

class Test {

private:

~Test() {}

};

int main()

{

Test* t = new Test;

}

上面的程序也可以正常工作。当使用动态内存分配创建某些内容时,程序员有责任将其删除。因此,编译器不会打扰。

在将析构函数声明为私有的情况下,也可以使用malloc()函数创建该类的实例。在下面的程序中实现相同。

#include <bits/stdc++.h>

using namespace std;

class Test {

public:

Test() // Constructor

{

cout << "Constructor called\n";

}

private:

~Test() // Private Destructor

{

cout << "Destructor called\n";

}

};

int main()

{

Test* t = (Test*)malloc(sizeof(Test));

return 0;

}

但是,以下程序编译失败。当我们调用delete时,将调用析构函数。

#include <iostream>

using namespace std;

class Test {

private:

~Test() {}

};

int main()

{

Test* t = new Test;

delete t;

}

我们在上面的程序中注意到,当一个类具有私有析构函数时,只能创建该类的动态对象。以下是一种使用私有析构函数创建类并具有作为类朋友的功能的方法。该功能只能删除对象。

#include <iostream>

// A class with private destuctor

class Test {

private:

~Test() {}

friend void destructTest(Test*);

};

// Only this function can destruct objects of Test

void destructTest(Test* ptr)

{

delete ptr;

}

int main()

{

// create an object

Test* ptr = new Test;

// destruct the object

destructTest(ptr);

return 0;

}

私有析构函数的用途是什么?

每当我们想要控制类对象的销毁时,我们都将析构函数设为私有。对于动态创建的对象,可能会发生以下情况:将指向该对象的指针传递给函数,然后该函数删除该对象。如果在函数调用后引用了对象,则该引用将变得悬而未决。

以上就是今天的全部内容了。每日分享小知识,希望对你有帮助~

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

C语言C++编程学习交流圈子,QQ群:765803539点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习视频分享:

 

标签:函数,示例,C++,private,析构,Test,include,class
来源: https://blog.csdn.net/qq_42366672/article/details/116275014

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有