从C到C++(二)

http://blog.csdn.net/lwbeyond/article/details/6202256

楼上是关于拷贝函数的介绍↑

析构函数

当类中涉及到动态内存时,该函数如图构造函数一样很重要。

复制构造函数

特别涉及到指针时,要自己定义复制构造函数。


在学习中的总结:

1.char*a="dadd";

strlen (a)=4  可见不包括字符串的\0

cout<<a  输出dadd 可见此两处a代表dadd

2.在析构函数里加上delete以删除new的动态内存

但是如果你把类的地址给一个指针,并用new给他分配内存,你就不能指望析构函数了,必须用delete把这个指针消除

3.如果两个类中都有一个指向字符串的指针a,则使用默认复制构造函数时,两个类的a指向同一片内存,这就危险了。

因此我们必须自己构造复制函数

CBox(const CBox &CBox1)

{

a=new char[strlen(CBox1.a)+1];

strcpy(a,CBox1.a);

}

这样以来他们就独立了

4.如果你认为,你没有使用一个类给另一个类赋值这样的操作,因此想减去麻烦,那你就错了,如果不遇到指针还好,遇到了,就很麻烦了。

比如上面的类CBox,包含指针a

定义一个函数



void display(CBox box1)

{

cout<<a;

}

CBox box;

display(box);

如果我们使用默认复制构造函数,那么在调用display时,box的指针a会复制给box1的a,那么两个类的a指向一个内存的情况,

就这样,没有一点点防备,也没有一丝顾虑地出现在你的世界里了,当你display完了之后,系统很天真地把box1这个形参给销毁,也就把

a指向的内存也释放了,这个时候你原来box的a就指向一个不被保护的内存,随时可能被其他东西占用,这就跟你发现你住了几十年的房子

没有房产证,而这个时候政府就要拆迁了一样。呵呵。。。好玩不。


void display(CBox box1)

{

cout<<a;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值