分类: C/C++
2013-01-30 23:11:03
这一章相对第四版是新增的,主讲动态内存与智能指针,再次推荐了使用智能指针与各种容器来“操作”内存,避免直接和new打交道。
1. shared_ptr,从boost那里过来的,内存保留与引用计数,多个对象可共享同一内存(上的对象),简单想一个IP数据包就明白了。
强调慎重使用那个get()接口,避免误释放。
2. unique_ptr,基本要取代老的那个auto_ptr,每一个该对象专享其指向的东东,唯一性。
3. weak_ptr,配合shared_ptr使用的,重点是weak(弱),不会增加shared_ptr指向对象的引用计数,用的时候多判断一下。
4. 堆区上申请出来的数组不能用range-for循环,不知道循环计数是多少,主意是说new返回的那个指针没有通常数组的性质。后面又说堆区数组可以用大括号 list initializing的方式初始化,但不能用小括号的方式。
int *p1 = new int[3](0,1,2); int *p2 = new int[3]{0,1,2}; typedef int ary[3]; int *p3 = new ary; delete [] p3;第一行是编不过的 : error: ISO C++ forbids initialization in array new