Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300093
  • 博文数量: 148
  • 博客积分: 4365
  • 博客等级: 上校
  • 技术积分: 1566
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 21:38
文章分类
文章存档

2014年(2)

2013年(45)

2012年(18)

2011年(1)

2009年(54)

2008年(28)

我的朋友

分类: 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
下面的typedef ary后,再用new 出来的ary指针,释放时要用delete [],因为本质是多片内存的申请,effective c++里好像见过。

阅读(784) | 评论(0) | 转发(1) |
0

上一篇:关联容器相关

下一篇:delete与default

给主人留下些什么吧!~~