STL容器为值拷贝 并不是引用拷贝
#include#include using namespace std; class Teacher { public: Teacher(const char* name, int age) { cout << "Teacher Construct." << endl; int len = strlen(name) + 1; p_name = new char[len]; this->age = age; strcpy_s(p_name, len, name); } Teacher(const Teacher& obj) { cout << "Teacher Copy Construct." << endl; int len = strlen(obj.p_name) + 1; p_name = new char[len]; strcpy_s(p_name, len, obj.p_name); this->age = obj.age; } ~Teacher() { cout << "~Teacher Destruct." << endl; if (p_name != NULL) { delete[] p_name; p_name = NULL; age = 0; } } public: Teacher& operator=(const Teacher& obj) { cout << "operator= run." << endl; if (p_name != NULL) { delete[] p_name; p_name = NULL; age = 0; } int len = strlen(obj.p_name) + 1; p_name = new char[len]; strcpy_s(p_name, len, obj.p_name); this->age = obj.age; return *this; } private: char* p_name; int age; }; void objplay1() { Teacher t1("t1", 21); Teacher t2 = t1; Teacher t3(t1); } void objplay2() { Teacher t1("t1", 21); Teacher t2("t2", 22); Teacher t3("t3", 23); vector v1; v1.push_back(t1); v1.push_back(t2); v1.push_back(t3); } void objplay3() { Teacher t1("t1", 21); vector v1; v1.reserve(4); v1.push_back(t1); Teacher t2("t2", 22); v1.push_back(t2); } int main() { objplay3(); system("pause"); return 0; }



