// 深拷贝,异常安全的深赋值 #include <iostream> #include <string.h> using namespace std; class String { public: String(const char *str = " ") { m_data = new char[strlen(str) + 1]; strcpy(m_data, str); } String(const String &s) { m_data = new char[strlen(s.m_data) + 1]; strcpy(m_data, s.m_data); } // 异常安全的深赋值 // 一般深赋值要先释放原来m_data的空间,若原来空间里的东西还有用,就会带来很大的麻烦 // 这种深赋值可以避免出现那样的情况 String& operator=(const String &s) { if (&s != this) { String tmp(s.m_data);// 用要赋值的数据重新构造出一个对象 char *ptmp = m_data;// 交换指针的指向 m_data = tmp.m_data; tmp.m_data = ptmp; } return *this; } ~String() { delete[]m_data; } public: void print() { cout << m_data << endl; } private: char *m_data; }; int main() { String s("hello"); s.print(); String s1(s); s1.print(); String s2; s2 = s1; s2.print(); return 0; }
时间: 2024-11-06 23:28:58