C++对象创建与释放

简单来说,涉及到构造函数,构造函数重载,成员初始化,拷贝构造函数,析构函数。

构造函数没有返回值,成功就成功了。失败进行异常处理。所以用ObjectName::ObjectName(){}构造。根据传参不同支持重载。一个构造函数都没有的话会默认一个无参数构造函数,但是一旦有一个及以上的构造函数就没有这个无参构造函数了,所以如果有需求要自己写一个无参版本的构造函数。使用无参构造函数构造一个对象,为了与返回类型为对象的无参函数的声明的语法区分,不能加括号(Date d;想一想,Date d();不就是声明了么)。类成员中有具体的别的类的对象(A的类成员有B类的对象),在构造A的时候编译器检查到了B的对象存在,先调用B类的构造函数(优先B的默认构造函数,即无参的那个),再调用A的构造函数。希望给B对象传参,即调用B的带有参数版本的构造函数,需要在A的构造函数上使用冒号语法。A(int amember, int bmember):am(amember),bm(bmember){},这样先调用了B bm(bmember){}构造函数,再把amember赋值。这样嵌套可以将类内所有类成员构造完成。

创建对象的唯一途径是调用构造函数。从逻辑上来说,创建对象->使用对象->销毁对象的顺序是不能改变的。C++需要完成这一点。对于局部对象(即函数内定义的和文件内定义的),就是按运行中出现的顺序创建。静态对象当然只创建一次。对于全局对象,在main函数开始前就已经运行了构造语句了,但是顺序未知,所以尽量不要创建全局对象。成员对象的构造顺序取决于定义顺序。类C中有A和B两个成员变量,但B类在A类前面定义,那就先构造B,不过一般也不用关心这个。

拷贝构造函数,用某个已经被构造的对象来构造一个新的对象(类似复制)。触发条件:1、Date d1 = d2; 2、Date d1(d2); 3、函数形参中出现未传引用的类如void copy(Date d){}。不自己定义拷贝构造函数的话,默认浅拷贝,即拷贝一个对象本体,并不复制实体,类似创建了一个新指针。深拷贝需要自定义拷贝构造函数,一般当成员变量中有指针、需要变换的静态成员变量时,为了保持对象与本体不是同一个,需要自定义。

析构函数,用于内存回收处理。也没有参数,没有返回值,~ObjectName()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值