public class ResourceHolder
{
~ResourceHolder()
{
// 这里是清理非托管资源的用户代码段
}
}
四.小结
构造函数与析构函数虽然是一个类中形式上较简单的函数,但它们的使用决非看上去那么简单,因此灵活而正确的使用构造函数与析构函数能够帮你更好的理解CLR的内存管理机制,以及更好的管理系统中的资源 。
c++中什么时候调用构造函数和析构函数在对象被创建的时候就会调用构造函数,比如 声明一个类class A{...} , 当你在main函数中
A a ; 定义一个对象a的时候,就调用构造函数,默认构造函数都是无参数的 ,构造函数就相当给对象a初始化而已 , 就相当于c语言中 int a= 3 初始化a的值而已,以为你在类中是不能直接给private中的类成员赋值的,所以就靠构造函数,不过要注意有参构造和无参构造,默认都是无参的,比如你A a(1, 3)这样的就不对了 除非你在类中写一个带参数的构造函数 。
当函数调用结束的时候,会自动调用析构函数,比如你在clsaa A { public:Add().....},
当你A a; a.Add();后 就自动调用析构,你可以在类中 ~A{cout 。。。},你就会发现调用
a.Add() 后就打出你在析构函数中写的东西 , 是自动调用的 , 析构的作用就是释放对象占用的资源 。以为默认析构什么也不打印,所以你不会直观看出析构函数什么时候执行,自己在析构中加上打印的语言你就会看到了 。希望对你能有所帮助
C++中,为什么类中常用构造函数?首先,构造函数是一定存在的,即使你不写,也会给你一个自动生成的无参数的构造函数(基本上什么都不做);然后,构造函数存在的目的是初始化对象,对象初始化是非常重要的,不初始化可能导致很多问题 , 于是C++就给构造对象的同事绑定了构造函数 , 这样只要你创建对象就一定会初始化 。
比如C语言中创建一个对象一般用一个函数
LinkNode*
createNode();在这个函数里初始化
而C++中创建一个对象用
new
LinkNode;
初始化放在构造函数里,new的时候会自动调用的(不一定是new,只要创建对象就一定会调用)
如何用c语言实现CString的构造函数,析构函数和赋值函数类是编程人员表达自定义数据类型的C++机制 。它和C语言中的结构类似,C++类
支持数据抽象和面向对象的程序设计,从某种意义上说,也就是数据类型的设
计和实现 。
那么
String
类的原型如下
class
String
{
public:
String(const
char
*str=NULL);
//构造函数
String(const
String
other);
//拷贝构造函数
~String(void);
//析构函数
String
operator=(const
String
other);
//等号操作符重载,赋值函数
ShowString();
private:
char
*m_data;
//字符指针
};
String::~String()
{
delete
[]
m_data;
//析构函数,释放地址空间
}
String::String(const
char
*str)
{
if
(str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'/0';
{
m_data=https://www.04ip.com/post/new
char[1];
*m_data='https://www.04ip.com/0';
}
else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
{
int
length=strlen(str);
m_data=https://www.04ip.com/post/new
char[length+1];
strcpy(m_data,str);
}
}
String::String(const
String
other)//拷贝构造函数,功能与构造函数类似 。
推荐阅读
- 老年人迷你代步车直播卖货,老年人代步车代理
- 3200频率选什么cpu,3200频率可以超多少
- 超级飞行steam游戏,超级飞机游戏
- 云南区块链电子票据,云南区块链电子发票开错了怎么作废
- java成绩管理代码 java编写学生成绩管理的代码
- postgresql用户只读的简单介绍
- 怪物格斗苹果游戏下载,怪物格斗2下载
- php接收小程序数据 php小程序后端
- gis什么软件好,有哪些gis软件