标签:动态分配 operator html 注意 oid 需要 字段 tps tail
//copy constructor 声明 string(const string&); //assign operator 声明 string& operator=(const string& rhs); //拷贝构造函数的实现 string::string(const string& another) { std::cout << "拷贝构造函数被调用:\n"; m_data = new char[strlen(another.m_data) + 1]; strcpy(m_data, another.m_data); } // 赋值运算 string& string::operator=(const string& rhs) { std::cout << "赋值运算符被调用:\n"; if (this == &rhs) return *this; delete[]m_data; m_data = new char[strlen(rhs.m_data) + 1]; strcpy(m_data, rhs.m_data); return *this; }
说到拷贝构造函数,就不得不提深拷贝和浅拷贝。通常,默认生成的拷贝构造函数和赋值运算符,只是简单的进行值的复制。例如:上面的Person
类,字段只有int
和string
两种类型,这在拷贝或者赋值时进行值复制创建的出来的对象和源对象也是没有任何关联,对源对象的任何操作都不会影响到拷贝出来的对象。反之,假如Person
有一个对象为int *
,这时在拷贝时还只是进行值复制,那么创建出来的Person
对象的int *
的值就和源对象的int *
指向的是同一个位置。任何一个对象对该值的修改都会影响到另一个对象,这种情况就是浅拷贝。
深拷贝和浅拷贝主要是针对类中的指针和动态分配的空间来说的,因为对于指针只是简单的值复制并不能分割开两个对象的关联,任何一个对象对该指针的操作都会影响到另一个对象。这时候就需要提供自定义的深拷贝的拷贝构造函数,消除这种影响。通常的原则是:
对于拷贝构造函数的实现要确保以下几点:
摘自:https://blog.csdn.net/BostonRayAlen/article/details/93041395 , https://www.cnblogs.com/wangguchangqing/p/6141743.html
标签:动态分配 operator html 注意 oid 需要 字段 tps tail
原文地址:https://www.cnblogs.com/jibisheng/p/13156160.html