用NULL(0)去构造string是非法的,即
string a(0);
这是非法的代码。
(1) 首先,string提供了接受一个const char *参数的construtor,这个构造函数执行的是“深拷贝”,即并不是简单地将传入的const char*指针保存在内部私有字段,而是自己重新开辟内存,然后将传入的const char*所指向的字符串“strcpy”到这块新创建的内存中;
(2) 其次,string并没有在构造函数中执行“NULL检查”,所以如果你试图用NULL(0)去初始化一个string,尽管编译会通过,但是运行期会出现“内存访问非法”之类的错误。理由:按照(1)中的说法,“string(const char*)”(姑且这么命名了,其实名字不是这样的)在执行“strcpy”操作时会从传入的const char*所指向的内存逐个拷贝字符(直到遇到'/0'为止),但是我们传入的是NULL(0),所以访问“0地址”自然是非法的了。(不过比较讨厌的是,这个错误直到运行时才暴露出来,编译期隐藏的还很好:( )