类和动态内存管理注意的几个问题
来源:互联网 发布:淘宝上如何买bb弹的枪 编辑:程序博客网 时间:2024/06/16 10:35
1.默认构造函数分为带参数和不带参数两种,在类对象声明时,不能同时匹配两个构造函数,否则会出错!
2.复制构造函数:用于将一个对象复制到新创建的对象中,其原型为:
<span style="white-space:pre"></span>class_name(const class_name &t)3.深度复制:如果类对象有一字符串成员char * str;,复制构造函数应当复制字符串并将副本的地址赋给str成员,而不仅仅时复制字符串地址。用于深度复制的构造函数又称为显式复制构造函数。
eg:
string :: string(const stringBad & st){ num_string++; len=st.len; str=new char[len+1]; std::strcpy(str,st.str);}4.浅复制:仅仅复制指针信息,即字符串地址。用于浅复制的构造函数又称为隐式复制构造函数。
eg:
string :: string(const char * s){ len=strlen(s); str=new char[len+1]; num_string++; std::strcpy(str,s);}
5.如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete。
6.new和delete必须相互兼容匹配。new对应delete,new[ ]对应delete[ ].
7.如果有多个构造函数,则必须以相同方式使用new,统一使用new与delete、new[ ]与delete[ ]。因为只有一个析构函数,所有的构造函数必须和它相对应兼容。然而,可以在一个构造函数中使用new初始化指针,而在另一个构造函数中将指针初始化为空(0或C++11中的nullptr),只是因为delete可以用于空指针。
8.应定义一个构造函数,通过深度复制将一个对象初始化为另一个对象。
eg:
string :: string(const stringBad & st){ num_string++; len=st.len; str=new char[len+1]; std::strcpy(str,st.str);}
9.应定义一个赋值运算符,通过深度复制将一个对象初始化为另一个对象。
String & String::operator=(const String & st){ if(this==&st) return *this; delete [] str; len=st.len; str=new char[len+1]; std::strcpy(str,st.str); return *this;}
1 0
- 类和动态内存管理注意的几个问题
- Sybase注意的几个问题
- 要注意的几个问题
- 接口注意的几个问题
- composer注意的几个问题
- 关于指针和内存的几个问题
- 关于指针和内存的几个问题
- 关于指针和内存的几个问题
- 转:关于指针和内存的几个问题
- 关于指针和内存的几个问题
- 关于指针和内存的几个问题
- 关于指针和内存的几个问题
- 动态内存管理类
- 网页设计必须注意和掌握的几个问题
- expect安装和使用需要注意的几个问题(转)
- C#的动态内存管理类
- IPicture要注意的几个问题
- 初学Erlang注意的几个问题
- 学习OpenBlas
- STL vector按多字段值排序
- windows cmd
- 经典SQL学习笔记 (六)-用户管理、视图、序列、索引、权限
- videobuf处理流程
- 类和动态内存管理注意的几个问题
- iOS上使用自定义ttf字体
- git常用回滚命令
- 字符串过滤C++实现
- java实现文件的上传下载
- Word、Excel中实现表格打印中,标题行在每页都显示
- 程序员一生必读的书籍
- iOS笔记之_OC内存管理
- 黑马程序员--Java基础--其他