我自己写的是字符串类。而且我不知道如何编写Сopy构造函数。 我有这样的代码。
class S {
private:
char *string;
int l;
public:
S::S(const S &s){
string = new char[l+1];
memcpy(string,s.string,l+1);
}
};
Complier没有给出任何错误,但.exe因未知错误而关闭。我试过在main()函数中使用它。
S pop("Q6");
S str(pop);
所以我期待着你的帮助。
答案 0 :(得分:8)
在您的复制构造函数
中 string = new char[l+1]
l
尚未初始化为字符串的长度,因此它可以是任何值。您应该在使用它之前初始化它(通过复制s.l
的值)。
答案 1 :(得分:3)
拥有复制构造函数后,还需要提供赋值运算符和析构函数。这称为rule of three。
但更好的方法是使用智能指针,然后你不需要注意那个,三个规则变为rule of zero。
您也忘了初始化l
。更重要的是,memcpy
在C ++代码中没有真正的位置。使用标准库算法而不是C函数(在本例中为std::copy
)。
答案 2 :(得分:2)
试试这个
public:
S::S(const S &s) : l(s.l)
{
string = new char[l+1];
memcpy(string,s.string,l+1);
}
答案 3 :(得分:1)
问题出在l+1
。 l
未初始化。你需要在使用前分配它,比如l = s.l;
。