当是涉及到深拷贝是,一种解决方式就是自己写构造函数处理深拷贝,另一种方式就是等号操作符重载
等号操作符重载实例:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
/*单目运算符重载*/
class eqPtor{
private:
char *str;
int str_length;
public:
eqPtor(char* m_str, int m_length)
{
this->str_length = m_length;
this->str = new char[str_length+1];
strcpy(this->str, m_str);
}
eqPtor(eqPtor &opp)
{
this->str_length =opp.str_length;
this->str = new char[str_length + 1];
strcpy(this->str, opp.str);
}
/*等号操作符重载*/
#if 0 /*等号操作符重载方式1*/
void operator=(eqPtor &opp1)
{
/*首先判断当指针是否分配内存,如果是则先释放后分配*/
if (this->str != NULL)
{
delete this->str;
this->str_length = 0;
}
this->str_length = opp1.str_length;
this->str = new char[str_length + 1];
strcpy(this->str, opp1.str);
}
#endif
/*等号操作符重载方式2*/
eqPtor operator=(eqPtor &opp1)
{
/*首先判断当指针是否分配内存,如果是则先释放后分配*/
if (this->str != NULL)
{
delete this->str;
this->str_length = 0;
}
this->str_length = opp1.str_length;
this->str = new char[str_length + 1];
strcpy(this->str, opp1.str);
return *this;
}
void print()
{
cout << " :" << this->str << endl;
}
~eqPtor()
{
if (this->str != NULL)
{
delete this->str;
this->str_length = 0;
}
}
};
int main()
{
{
eqPtor opp1("libin", sizeof("libin"));
eqPtor opp2("yiyierer", sizeof("yiyierer"));
eqPtor opp3("busanbusi", sizeof("busanbusi"));
//eqPtor opp2=opp1;
opp1 = opp2;//这样是调用等号操作符,由于这里没有对等好操作符进行重载,所以如果之际使用就会出现错误
//opp1 = opp2=opp3 这种运算方式用等号操作符重载方式一不可行 应为等号操作符是从有往左结合的,所,opp2=opp3的运算结果是void ,相当于opp1=void不可行
opp1 = opp2 = opp3;/*这里将等号操作修改以后就可以使用这种操作*/
opp1.print();
}
system("pause");
return 0;
}