一、三种函数(带有指针都要重写这三个函数)
拷贝构造:initialization list 建议使用初始化列表,对于初始化class sizeof(class) 特别大的,优化特别明显;而一般的类型,我个人认为,没什么区别。并且现在,编译器也会去替你优化的,所以个人认为不要特别纠结这个初始化列表。
拷贝赋值:1、检测自我赋值;
2、delete 指针,new 指针copy内容; 或者检测之前那个指针分配的长度 > 要copy的长度
,清空内容copy内容,否则delete 指针,new 指针copy内容;
析构:清理战场,将所有的资源进行释放;
建议:1)、分配的时候可以给一个 因子(对于string,可以设置2 ,m_date = new char[len * 2]),这样后面就
不需要做去delete,new操作;
2)、对于系统重复使用一个内容的时候,可以采用 引用计数的;这样也同样可以减少对内存的操作;
3)、new,delete 最好用成对宏定义一个,来保证正确性。#define NEW_PTR(T) new T; #deine DELETE_PTR(ptr) delete ptr
#define NEW_ARRAY(T,LEN) new T[LEN]; #deine DELETE_ARRAY(ptr) delete []ptr
二、new,delete 对象的过程
new ==》 void* pc = new char[sizeof(T)];
类型转换pc->ctor();
delete ==》pc->dtor();
delete pc;