C++

来源:互联网 发布:惊艳类长相知乎 编辑:程序博客网 时间:2024/06/06 04:33
#include <iostream>using namespace std;class String {public:String(char* s);String(const String& s);String& operator=(const String &s);~String();friend ostream& operator<<(ostream& out,const String& s);private:char *data;};int main(){String s("hello");String ss("\n");ss = s;}String::String(char* s) {data = new char[strlen(s) + 1];strcpy(data , s);}String::~String(){cout << "~destructor!" << endl;if (data){delete []data;data = NULL;}}String::String(const String& s){data = new char[strlen(s.data) + 1];strcpy(data, s.data);}String& String::operator=(const String &s){if (&s != this){delete []data;data = new char[strlen(s.data)+1];strcpy(data, s.data);}return *this;}ostream& operator<<(ostream& out,const String& s){out << s.data ;return out;}

看C++沉思录的写的一个类,开始一堆bug。记录下来,警示自己吧。

char *是c的字符串, 开始构造函数,没有new给他开辟空间。 然后在重载=的时候,就开始出错。

然后是重载=中的data = new char[strlen(s.data)+1] 写成了data = new char(strlen(s.data)+1),这就完全不一样了,一个是开辟一个数组,另一个只是开辟一个char字符并赋初值。导致在析构的时候老是出错。开始,没有检查出来,当我决定用malloc 和 free去替换的时候,才发现了。

原创粉丝点击