C++浅谈构造函数和析构函数

构造函数

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编辑器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。
构造函数是特殊的成员函数,需要注意的是,构造函数的名称虽然叫构造,但是需要注意的是构造函数的主要任务并不是开空间创建对象,而是初始化对象。
构造函数的特征
1.函数名与类名相同;2.无返回值;3.对象实例化时编辑器自动调用对应的构造函数;4.构造函数可以重载。
这里我们用日期类来大概看看构造函数的样子。

public:
  //1.无参构造函数
  Date()
  {}
  //2.带参构造函数
  Date(int year,int month,int day)
  {
   _year=year;
   _month=month;
   _day=day;
 private:
  int _year;
  int _month;
  int _day;
  };
  void TestDate()
  {
    Date d1;//调用无参构造函数
    Date d2(2015,1,1);//调用带参的构造函数
  }

如果本身类中没有构造函数的话,C++编译器会默认生成一个无参的构造函数,但是用户如果自己定义了则编辑器不会再生成
无参的构造函数和缺省构造函数都称为默认构造函数,并且默认构造函数只能有一个。

析构函数

析构函数:作用与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编辑器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。
析构函数是特殊的成员函数。
析构函数的特征
1.析构函数名是在类型名前加上字符~;2.无参数无返回值;3.一个类有且只有一个析构函数。若未显示定义,系统会自动生成一个析构函数;4.对象生命周期结束时,C++编译系统自动调用析构函数。

typedef int DateType;
class SeqList
{
public:
  SeqList(int capacity =10)
  {
    _pData = (DataType*)malloc(capacity *sizeof(DataType));
    assert(_pData);
    _size=0;
    _capacity=capacity;
  }
  ~SeqList()
  {
   if(_pData)
   {
    free(_pData);//释放堆上空间
    _pData=nullptr;//将指针置空
    _capacity=0;
    _size=0;
   }
  }
private:
 int* _pData;
 int _size;
 int _capacity;
 

关于编辑器自动生成的析构函数,对会自定义类型成员调用它的析构函数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值