您的位置:首页 > 编程语言 > C语言/C++

从C到C++(二)

2016-12-11 20:51 155 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: