我正在构建一个String类,我想知道在构造函数和复制构造函数中我是应该复制字符还是只指向与传递的char * /复制的String对象的char *相同的内存地址? 这是我到目前为止写的:
String::String(const char* pch)
{
str = const_cast<char*>(pch);
length = getLen();
}
String::String(const String& that)
{
length = that.length;
str = new char[length];
for (unsigned int i = 0; i < length; i++)
{
str[i] = that.str[i];
}
}
在构造函数中,我只是指向与const char *相同的地址,我应该将其保留为原样还是将每个字符复制到新分配的内存块中?如果我要更改字符串,我会分配一个新的内存块,所以char *是const并不是什么大问题(我认为)。在复制构造函数中,我将每个字符复制到一个新的已分配的内存空间,但我不确定它是否必要,因为如果我稍后更改字符串,将为正在更改的对象分配一个新的内存块,使另一个对象保持不变指针未触及。 想听听你的意见。 “str”的类型为char *。
答案 0 :(得分:0)
由于您无法控制指针传递给构造函数的字符串的生命周期,因此依赖它是不安全的。复制字符串。
此外,由于您不知道传递的指针是否为const
,因此抛弃const就会导致未定义的行为。