想要创建自己的类String

时间:2013-06-17 18:43:10

标签: c++ string class pointers attributes

我在C ++中创建了一个自己的类String。

我有一个问题:

class String {
    char* arr;
    int len;

    friend ostream& operator << (ostream& s, const String& c) {
        return s << c.arr;
    }

    Public:
        String() {
            arr = NULL;
            len = 0;
        }
        String(const char* name) {
            *arr = *name;
        }
}

主要是我有这个:

String *s = new String("abcde"); 
    cout << *s << endl;

问题是编译器向我显示了这个:

  

总线错误:10

我正在使用带有g ++的终端处理mac。

我该如何解决这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:6)

此:

String(const char* name) {
    *arr = *name;
//  ^^^^
}

取消引用未初始化的指针,从而为您提供未定义的行为。我想你真正想要做的是这样的事情:

#include <cstring> // For strlen() and strcpy()

String(const char* name) {
    len = strlen(name);
    arr = new char[len + 1];
    strcpy(arr, name);
}

另外,不要忘记为清理提供析构函数,复制构造函数和复制赋值运算符 - 如果在C ++ 11中工作,也可以使用移动构造函数和移动赋值运算符。