摘要:
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)
编辑
摘要:
1、考虑二维数组,在栈上分配,必须在编译时确定大小,也就是大小是常量。另外一点,C++不支持在堆上分配二维数组。怎么解决这个问题? 二维数组可以看成,一维数组的数组。因此,可以使用代理类,Array2D的元素是Array1D,Array1D是一维数组,为了支持[][]操作,Array2D重载操作符[],Array1D重载操作符[]。2、区分operator[]的读写操作,考虑string,基于引用计数的string,赋值是浅拷贝,两个指针指向同一块内存。通过[]获取string中的字符,如果只是读取,没有关系,还可以共享。如果是写操作,必须做一个副本。因此,对于[],需要想办法区分是读操作还.
阅读全文
posted @ 2014-04-03 17:02
Andy Niu
阅读(253)
推荐(0)
编辑
摘要:
1、首先考虑一维数组。在栈上分配的数组,必须在编译时确定大小,也就是说大小是常量。在堆上分配的数组,大小可以是变量。2、对于二维数组,在栈上分配,也必须在编译时确定大小,即大小是常量。同时,不能在堆上分配二维数组。
阅读全文
posted @ 2014-04-03 16:51
Andy Niu
阅读(218)
推荐(0)
编辑