第9周项目1-深复制体验(1)
2016-05-06 16:38
267 查看
<pre class="cpp" name="code">#include<iostream> #include<cstring> using namespace std; class A { private: char *a; public: A(char *aa) { a = new char[strlen(aa)+1]; //(a)这样处理的意义在于:_为指针数组分配一个空间避免出现野指针。 strcpy(a, aa); //(b)数据成员a与形式参数aa的关系:所占的空间大小是相同的 } ~A() { delete []a; //(c)这样处理的意义在于: 释放出所建立的动态内存节约空间 } void output() { cout<<a<<endl; } }; int main(){ A a("good morning, code monkeys!"); a.output(); A b("good afternoon, codes!"); b.output(); return 0; }
增加复制构造函数后
#include<iostream> #include<cstring> using namespace std; class A { private: char *a; public: A(char *aa) { a = new char[strlen(aa)+1]; //(a)这样处理的意义在于:_为指针数组分配一个空间避免出现野指针。 strcpy(a, aa); //(b)数据成员a与形式参数aa的关系:所占的空间大小是相同的 } A(A &b) { a = new char[strlen(b.a)+1]; strcpy(a,b.a); } ~A() { delete []a; //(c)这样处理的意义在于: 释放出所建立的动态内存节约空间 } void output() { cout<<a<<endl; } }; int main() { A a("good morning, code monkeys!"); a.output(); A b(a); b.output(); return 0; }
学习心得:
在分配指针数组空间的时候要加1是因为还要有字符串结束的结束符,在建立了动态内存后要释放节约空间。如果去掉(a)那么指针*a就成了野指针编译虽然没有错误但是没有被分配地址程序会崩是很危险的。
相关文章推荐
- Android ListView单选CheckBox
- 一些常被你忽略的CSS小知识【必看】
- Android开发调用第三方邮件应用发送邮件
- ireport中文不显示和乱码的处理
- Dictionary
- 快速排序法
- bzoj 1050: [HAOI2006]旅行comf(最小生成树+并查集)
- 正则表达式
- 【模板】KMP
- Spring SpringMVC文件上传错误(二)
- JavaScript之严格模式 "use strict";
- Sql Server插入数据并返回自增ID,@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT的区别
- mysql查找表、触发器、存储过程或函数
- 最全面的AndroidStudio配置指南总结-包括护眼模式
- 浅谈测试的成就感
- 最全面的AndroidStudio配置指南总结-包括护眼模式
- java中Comparator比较器的使用
- iOS编码
- Unidirectional TSP(dp)
- 数据结构_线性表_链式存储_单向循环链表的基本操作