C++ 拷贝构造

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25244495/article/details/83475043
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
}

猜你喜欢

转载自blog.csdn.net/qq_25244495/article/details/83475043