这是正确的代码还是应该动态地将内存分配给接收char-pointer的String-class的member-variable?
#include <iostream>
using namespace std;
class String {
char *string;
public:
String(char *ch) {
string = ch;
}
void print() {
cout << string;
}
};
int main() {
String string("hello");
string.print();
return 0;
}
答案 0 :(得分:2)
让我们从陈述
开始String string("hello");
这里“你好”是一个字符串文字。用作参数时,它会隐式转换为
类型的对象const char *
因此该类的相应数据成员应定义为
const char *string;
结果应该将类定义为
class String
{
private:
const char *string;
public:
String( const char *ch ) : string( ch )
{
}
void print() const
{
cout << string;
}
};
由于字符串文字具有静态存储持续时间,因此您的代码有效。考虑到该类没有指针。
另一方面,如果您希望该类确实拥有指针,那么您需要动态分配构造函数参数指向的数据的副本。在这种情况下,您还需要至少明确定义复制构造函数,复制赋值运算符和析构函数。