2014年4月3日
摘要: 1、什么是智能指针? 所谓智能指针就是,看起来,用起来,感觉起来都像原始指针,但是提供了更多功能。2、使用智能指针取代原始指针,可以获得更多的控制权。如下: a、在构造和析构的时候,可以做一些事。 b、在复制和赋值的时候,可以做一些事。 c、在解引用的时候,可以做一些事。3、智能指针可以对不同类型的指针进行封装,因此智能指针是一个模板类。4、智能指针对原始指针封装,内含一个原始指针,为了用起来像指针,重载->和*,->返回原始指针,*返回对象的引用,两个重载操作符都不改变智能指针,因此是const成员方法。5、考虑auto_ptr,拥有权转移,auto_ptr的copy构造会修改r 阅读全文
posted @ 2014-04-03 19:48 Andy Niu 阅读(578) 评论(0) 推荐(0) 编辑
摘要: 1、考虑二维数组,在栈上分配,必须在编译时确定大小,也就是大小是常量。另外一点,C++不支持在堆上分配二维数组。怎么解决这个问题? 二维数组可以看成,一维数组的数组。因此,可以使用代理类,Array2D的元素是Array1D,Array1D是一维数组,为了支持[][]操作,Array2D重载操作符[],Array1D重载操作符[]。2、区分operator[]的读写操作,考虑string,基于引用计数的string,赋值是浅拷贝,两个指针指向同一块内存。通过[]获取string中的字符,如果只是读取,没有关系,还可以共享。如果是写操作,必须做一个副本。因此,对于[],需要想办法区分是读操作还. 阅读全文
posted @ 2014-04-03 17:02 Andy Niu 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 1、首先考虑一维数组。在栈上分配的数组,必须在编译时确定大小,也就是说大小是常量。在堆上分配的数组,大小可以是变量。2、对于二维数组,在栈上分配,也必须在编译时确定大小,即大小是常量。同时,不能在堆上分配二维数组。 阅读全文
posted @ 2014-04-03 16:51 Andy Niu 阅读(218) 评论(0) 推荐(0) 编辑