读书人

有关问题:关于new

发布时间: 2013-10-15 16:47:37 作者: rapoo

问题:关于new
类的private中定义char * str;

类的构造函数中定义str=new char[1];
str[0]='\0';

C++ primer plus 中说 之所以写str=new char[1];
不能写str=new char;
是因为:上面两种方式分配的内存量相同,区别在于前者与类析构函数兼容,而后者不兼容。
析构函数中包含如下代码:delete[] str;
delete[]与使用new[]初始化的指针和空指针都兼容。因此对于下述代码:
str=new char[1];
str[0]='\0';
可修改为:str=0;

问题:new char和new char[1]不是一种方式么?
为什么str=new char[1];
str[0]='\0';
可修改为:str=0;







不是翻译的问题啊。。诶

你的问题考虑到使用场景才有了意义。就像需要和你此贴中贴的这个代码相结合看。
string的用途本就是存储字符串,所以一般都是char[n]型的数据。总不能用单个的char来存储字符串是吧?既然需要char[n],那就需要new char [];,从而对应的只能是delete []而不是delete,另外C中的空字符串不是NULL而是"",这样C++中用起来更“习惯”一些。因为string中有个c_str()成员函数是用来直接返回内置字符串数据的起始地址的。设计成new char[1]并赋值成'\0'就是为了照顾到这种和类似的需求。

读书人网 >C++

热点推荐