c++的构造和析构总结

为啥会有构造函数和析构函数,个人认为还是图省事。
如果没有构造函数,每一次初始化都需要手动调用初始化方法,一个两个还好说,那要是1000大小的数组呢??所以我们希望能让编译器帮我们自动的进行对象属性初始化。

构造函数

定义:c++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数。
1 在对象创建时自动调用,完成初始化相关工作。
2 无返回值,与类名同,默认无参,可以重载,可默认参数。
3 一经实现,默认不复存在。

默认构造函数

如果用户并没有指定构造函数,那创建对象时自动调用默认无参构造函数(或默认拷贝构造函数),否则调用用户定义构造函数
1)默认无参构造函数
编译器默认提供,函数体为空
2)默认有参构造函数
编译器默认提供,简单的进行成员变量值的复制,为浅拷贝,关于浅拷贝和深拷贝的区别,后面再分析。

自定义构造函数

当类中定义了拷贝构造函数,c++编译器不会提供无参构造函数
当类中定义了有参构造函数,c++编译器不会提供无参构造函数

1.无参构造函数
2.有参构造函数
3.拷贝构造函数

由己存在的对象,创建新对象。也就是说新对象,不由构造器来构造,而是由
拷贝 构造器来完成。拷贝构造器的格式是固定的。

class A
{
public:
	A(const A &another){
	
	}
}
4.构造函数初始化列表

如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成 员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进 行初始化,就必须调用这个类成员的带参数的构造函数, 如果没有初始化列表,那么他将无法完成第一步,就会报错

class B
{
public:
	B():a1_(参数),a2_(参数)//调用A类的构造函数完成初始化
	{
	}
private:
	A a1_;
	A a2_;
}
深拷贝和浅拷贝区别

浅拷贝:只是复制指针变量的值,指向同一块内存,不会开辟新的内存空间
深拷贝:会开辟新的内存空间

默认的拷贝构造函数提供浅拷贝,要想完成深拷贝需要自定义拷贝构造函数。
浅拷贝有时在某些情况下析构会出现问题

析构函数

定义
C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数 叫做析构函数.
规则:
1 对象销毁时,自动调用。完成销毁的善后工作。
2 无返值 ,与类名同。无参。不可以重载与默认参数
析构函数的作用,并不是删除对象,而在对象销毁前完成的一些清理工作
比如在删除对象前,释放在堆上分配的内存空间

class D
{
public:
	~D(){
	//析构体
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值