面向对象上带有指针的类

析构函数,拷贝构造函数, 拷贝赋值函数

析构函数:在对象离开作用域时,对象会结束声明周期,对象会自动调用析构函数。
拷贝构造函数:在创建一个的对象时,传入的参数为相同类的对象,将传入的参数的内容初始化为新对象的内容,编译器默认是对象内容的拷贝。
拷贝赋值函数:先创建出一个对象,然后再将右值对象的内容直接拷贝到左值的对象内容中。

带有指针的类 和 不带有指针的类 在 big tree中的区别

不带有指针的类:可以不用实现析构函数,拷贝构造函数,拷贝赋值函数,因为对象的内容则是对象的全部。
带有指针的类:一定要实现析构函数,拷贝构造函数,拷贝赋值函数,因为对象的内容不仅包含了对象本身,而且包含了指针指向的动态分配的内存地址。如果不是实现 big tree 函数,则对象在离开作用域后结束声明周期会产生内存泄露,拷贝赋值和拷贝构造会造成指针指向相同的动态内存区域。

析构函数

释放构造函数申请的内存。(当析构函数设置为protected 或是 private ,无法在栈中定义对象,想要在禁止在堆中创建对象,则将 operator new (size_t ) 函数删除 )

拷贝构造函数

申请内存,内存的大小等于存入参数指针指向内存的大小(字符串的长度 + ‘\0’)
将参数指针指向的地址拷贝到申请内存中。

拷贝赋值函数

判断左值和右值的地址是否相等(左值和右值是否为同一个对象)
是返回左值本身
否则往下执行
释放左值指向的内存地址,
申请内存, 内存大小为右值指针指向的内存大小(字符串长度 + '\0')
将右值指针内容拷贝到左值指针中
返回左值本身

内存

栈的内存:对象占用的内存是在栈中,当内存离开作用域之前会调用相对应的析构函数。
堆的内存:在使用堆的内存创建对象常用的两个 操作符 new  delete  。
new : 先申请内存,在创建对象。(1.申请内存, 2.将内存转化为相应的对象类型,3.调用构造函数创建对象)
delete: 先删除对象,在删除内存。(1.调用析构函数, 2.释放内存)
注意点: 
p = new type();  创建type类型对象并且初始化
delete p;删除type类型对象
p = new type[n] ; 创建type类型对象数组,大小为 n
delete[] p; 删除type类型对象数组
new delete 要成对存在,当创建的是单一对象,则释放单一对象,当创建对象数组时,要释放对象数组。如果创建对象数组,只删除单一对象,会造成对象调用析构函数的次数不够(对象有指向的内存空间没有释放),但是 new 申请的内存会释放完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值