C++ С;opy构造函数不起作用
我自己在写字符串课。我不知道如何编写Сopy构造函数。 我有这样的代码C++ С;opy构造函数不起作用,c++,constructor,copy-constructor,C++,Constructor,Copy Constructor,我自己在写字符串课。我不知道如何编写С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);
class S {
private:
char *string;
int l;
public:
S::S(const S &s){
string = new char[l+1];
memcpy(string,s.string,l+1);
}
};
编译器未给出任何错误,但.exe因未知错误而关闭。我尝试在main()函数中使用它
S pop("Q6");
S str(pop);
所以我期待着你的帮助。在你的副本构造函数中
string = new char[l+1]
l
尚未初始化为字符串的长度,因此它可以是任何值。在使用它之前,应该初始化它(通过从s.l
复制值)。一旦有了复制构造函数,还需要提供赋值运算符和析构函数。这就是我们所知道的
但是最好是使用智能指针,这样你就不需要注意它了,三的规则就成了最好的选择
您还忘了初始化l
。另外,std::copy
)。试试这个
public:
S::S(const S &s) : l(s.l)
{
string = new char[l+1];
memcpy(string,s.string,l+1);
}
问题出在
l+1
中<代码>l未初始化。您需要分配它,比如,l=s.l代码>使用前。为什么不在初始化列表中也初始化字符串?@Rocketq,这是初始化列表。例如,请参阅。@LuchianGrigore-如果字段的顺序不同,我会这样做(应该始终使用与它们声明的顺序相同的初始化列表。也可能要考虑是否使用<代码>新< /COD>的版本,它在失败时返回零指针或抛出异常。在生产中,您可能想考虑在这种情况下需要什么。完全符合我的<代码>关于我< /Cord>文本。谢谢。对于你的建议。我会尝试跟随他们。我不知道C++复制函数)这回答了这个问题,但是IMHO应该提到拷贝分配和破坏,以及智能指针是如何更好的开始。这个班级就像一颗定时炸弹。