C++中对象赋值

类机制中有默认的赋值操作符,只要定义了类,就可以进行对象的赋值操作。但是默认的赋值操作符只管对像本体的复制,如果对象之间要做深拷贝的话,则必须自定义赋值操作符。自定义赋值赋值操作符必须注意,原来的对象已经存在,要先将原来的资源释放掉,然后再进行深拷贝的复制。
#pragma warning(disable:4996)
#include
#include 

using namespace std;


class Person {
    char* pName;
public:
    Person(const char* pN = "noName") {
        cout << "Constructing " << pN << endl;
        pName = new char[strlen(pN) + 1];
        if (pName) {
            strcpy_s(pName, strlen(pN) + 1, pN);
        }

    }
    Person(const Person& s) {
        cout << "copy Cpnstructing " << s.pName << endl;
        pName = new char[strlen(s.pName) + 1];
        if (pName) {
            strcpy(pName, s.pName);
        }
    }

    Person operator = (Person& s) {
        cout << "Assigning " << s.pName << endl;
        if (this == &s) { return s; }   //判断是不是自己给自己赋值
        delete[] pName;
        pName = new char[strlen(s.pName) + 1];
        if (pName) {
            strcpy(pName, s.pName);
        }
        return *this;
    }
    ~Person() {
        cout << "Destructing222 " << pName << endl;
        delete[] pName;
    }
    void print() {
        cout << pName << endl;
    }
};

int main() {
    Person p1("David");
    Person p2;;
    p2 = p1;
    p2.print();
}

你可能感兴趣的:(C++中对象赋值)