C++ 拷貝構造
阿新 • • 發佈:2018-11-10
class MyString { private: char* _data; size_t _len; void _init_data(const char *s) { _data = new char[_len + 1]; memcpy(_data, s, _len); _data[_len] = '\0'; } public: MyString() { _data = NULL; _len = 0; cout << "構造" << endl; } MyString(const char* p) { _len = strlen(p); _init_data(p); cout << "構造:" << _data << endl; } MyString(const MyString& str) { _len = str._len; _init_data(str._data); cout << "拷貝構造: " << str._data << endl; } MyString& operator=(const MyString& str) { if (this != &str) { _len = str._len; _init_data(str._data); } cout << "等號:" << str._data << endl; return *this; } virtual ~MyString() { if (_data != NULL) { cout << "析構:"<< _data << endl; free(_data); } } }; void Test() { MyString a;// 構造 a = MyString("Hello");// 構造:Hello 等號:Hello 析構:Hello MyString b = MyString("Hi");//構造:Hi(沒有其他的了) MyString c = b;//拷貝構造:Hi std::vector<MyString> vec; vec.push_back(MyString("World"));// 構造:World 拷貝構造:World 析構World //返回前:析構:World 析構:Hi 析構:Hi 析構:Hello }