2

我正在自己编写字符串类。而且我不知道如何编写С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);
               }
};

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

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

所以我期待你的帮助。

4

4 回答 4

8

在您的复制构造函数中

 string = new char[l+1]

l尚未初始化为字符串的长度,因此它可以是任何值。s.l您应该在使用它之前对其进行初始化(通过从 复制值)。

于 2012-10-12T12:18:28.647 回答
3

一旦有了复制构造函数,还需要提供赋值运算符和析构函数。这被称为三法则

但更好的是使用智能指针,那么你不需要注意这一点,三的规则变成了零的规则。

你也忘了初始化l。更重要的是,memcpy在 C++ 代码中没有真正的位置。使用标准库算法而不是 C 函数(在本例中为std::copy)。

于 2012-10-12T12:18:32.260 回答
2

尝试这个

public:
    S::S(const S &s) : l(s.l)
    {
        string = new char[l+1];
        memcpy(string,s.string,l+1);
    } 
于 2012-10-12T12:18:59.163 回答
1

问题出在l+1. l未初始化。您需要l = s.l;在使用之前分配它。

于 2012-10-12T12:19:19.423 回答