编写String类时注意的坑

it2025-04-29  7

//输入符重载 istream& operator>>(istream& in, const MyString& str) { in>>str.m_data; return in; }

在博客上看了好几个人重载>>时,是这么写的。问题在于in>>str.m_data中,str.m_data并没有分配内存,所以这个>>一使用程序就会跑飞。应该先分配内存。

istream& operator>>(istream& in, const MyString& str) { char* buffer = new char[4096]; in >> buffer; str.m_data = new char[strlen(buffer) + 1];//+1是用来存放'\0',字符串结束符的。 memset(str.m_data, 0, strlen(buffer) + 1);//做一个负责的人。 strcpy(str.m_data, buffer); delete [] buffer; return in; }

 

最新回复(0)