c ++这个问题的问题在哪里?(带参数的构造函数)

DrJ*_*man 1 c++

假设字符串类具有私有数据成员,如下所示:

char *strval; 
int length; 
Run Code Online (Sandbox Code Playgroud)

以下字符串类的构造函数代码是否正确?如果不正确,为什么?

string::string(const char* s):length(strlen(s)) 
{ 
strval = s; 
} 
Run Code Online (Sandbox Code Playgroud)

我的回答是strlen()正在评估指针值,但这听起来不对.

Gre*_*ill 7

给出的构造函数代码是正确的,因为它将为大多数输入成功编译和运行.然而,至少有几个原因,它的风格很差:

  • 一个成员使用初始化列表初始化,而另一个成员在构造函数中分配(这是不一致的)
  • 不检查是否sNULL(但这可以记录为非法输入)
  • 如果你没有复制字符串,那么独立存储指针长度是多余的(因为它们可能不同步)