Сopy构造函数不起作用

时间:2012-10-12 12:14:32

标签: 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);
               }
};

Complier没有给出任何错误,但.exe因未知错误而关闭。我试过在main()函数中使用它。

S pop("Q6");
S str(pop);

所以我期待着你的帮助。

4 个答案:

答案 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+1l未初始化。你需要在使用前分配它,比如l = s.l;