Chinaunix首页 | 论坛 | 博客
  • 博客访问: 233911
  • 博文数量: 69
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 570
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-13 16:57
文章分类

全部博文(69)

文章存档

2011年(1)

2010年(5)

2009年(63)

我的朋友

分类: C/C++

2009-08-03 19:11:43

string *stringptr1 = new string;
string *stringptr2 = new string[100];
 
...
 
delete stringptr1;// 删除一个对象
delete [] stringptr2;// 删除对象数组

如果你在stringptr1前加了"[]"会怎样呢?答案是:那将是不可预测的;如果你没在stringptr2前没加上"[]"又会怎样呢?答案也是:不可预测。而且对于象int这样的固定类型来说,结果也是不可预测的,即使这样的类型没有析构函数。所以,解决这类问题的规则很简单:如果你调用new时用了[],调用delete时也要用[]。如果调用new时没有用[],那调用delete时也不要用[]

//////////////////////

这个规则对喜欢用typedef的人来说也很重要,因为写typedef的程序员必须告诉别人,用new创建了一个typedef定义的类型的对象后,该用什么形式的delete来删除。举例如下:

typedef string addresslines[4];       //一个人的地址,共4行,每行一个string
                               //因为addresslines是个数组,使用new:
string *pal = new addresslines;       // 注意"new addresslines"返回string*, 
                               // "new string[4]"返回的一样
delete时必须以数组形式与之对应:
delete pal;// 错误!
delete [] pal;// 正确

为了避免混乱,最好杜绝对数组类型用typedefs

 //////////////////////////////

请问:typedef int inta[10]是什么意思?

将 inta 定义成一个整型数组类型!而且这个数组有10个元素
typedef int inta[10];后
inta x;等价于 int x[10];

typedef的规则是这样的:
从左往右看,找到第一个没有定义的字符串,用这个字符串代替除了typedef和本身后的字符串。
比如你这道题:
typedef int inta[10];
从左向右找,第一个没定义的字符串为inta,用inta就可以代替除了typedef和本身(inta)剩下的字符串了,这里剩下的字符串是int [10],所以以后用int[10]的地方都可以用inta替换

阅读(1025) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~