#include <iostream>
#include <algorithm>
class MyStr {
public:
MyStr(const MyStr&);
MyStr& operator = (const MyStr&);
private:
char *pdata;
};
MyStr::MyStr(const MyStr& other) {
int len = strlen(other.pdata);
pdata = new char[len + 1];
strcpy(pdata, other.pdata);
}
// 返回引用只是因为高效, 返回对象同样可以连续复制
MyStr& MyStr::operator = (const MyStr& other) {
// 自赋值不能用 if (*this == other);
// a = "abc"; b = "abc";
// 他们是必须可以相互赋值的
/*
if (this != &other) {
int len = strlen(other.pdata);
char* tmp = new char[len + 1];
strcpy(tmp, other.pdata);
delete[] pdata;
pdata = tmp;
}
return *this;
*/
if (this != &other) {
MyStr tmp(other);
std::swap(tmp.pdata, pdata);
}
return *this;
}
类中的复制构造和赋值操作
最新推荐文章于 2022-03-03 21:54:54 发布