#include <iostream> #include <cstring> using namespace std; class String { // 一切都是深拷贝! private : char *m_data; public : String(const char *str = NULL); String(const String&); String& operator =(const String& rhs); ~String(); void show() { cout << m_data << endl; } }; String::String(const char *str) { // 记住这里你是不能写 m_data = str, 不用犯这种想当然的错误! if(str == NULL) { m_data = new char[1]; m_data[0] = '\0'; } else { int len = strlen(str); m_data = new char[len+1]; strcpy(m_data, str); } } String::String(const String& rhs) { if(rhs.m_data == NULL) { m_data = new char[1]; m_data[0] = '\0'; } else { int len = static_cast<int> (strlen(rhs.m_data)); m_data = new char[len+1]; strcpy(m_data, rhs.m_data); } } String& String::operator =(const String& rhs) { if(this == &rhs) return *this; // *别落下!* delete []m_data; // *一定要先释放以前的!* if(rhs.m_data == NULL) { m_data = new char[1]; m_data[0] = '\0'; } else { int len = static_cast<int> (strlen(rhs.m_data)); m_data = new char[len+1]; strcpy(m_data, rhs.m_data); } return *this; } String::~String() { delete []m_data; } int main() { String s("hello"); String s1("hi"); s = s1; s.show(); return 0; }
[C++] String类的复制控制的实现
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
c++ String类的实现
主要是通过这个例子,理解拷贝构造函数和赋值函数的区别:代码:#include <
拷贝构造函数 构造函数 赋值函数