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
}