64,654
社区成员
发帖
与我相关
我的任务
分享
struct st
{
public:
int a;
int b;
//方法一
void operator=(st*te)
{
if (this == te)
return;
memcpy(this,te,sizeof(st));
}
//方法二
void operator=(st&te)
{
if (this == &te)
return;
memcpy(this,&te,sizeof(st));
}
};
void operator=(st*te);//这个接口太不友好了,被赋值的对象是一个st类型的对象,赋值对象却是一个st的指针,容易搞混的
//两种方法问题都很大:
//方法一
void operator=(st*te)
{
if (this == te)
return;
memcpy(this,te,sizeof(st));//首先这里sizeof(st)是一个指针的大小,再者operator=不要用memcpy实现,考虑下派生类指针传递到该函数时的问题,如果有虚函数VPTR也被拷贝成派生类的了
}
//方法二
void operator=(st&te)//最好返回类型为st&,函数体中return *this;
{
if (this == &te)
return;
memcpy(this,&te,sizeof(st));//operator=不要用memcpy实现,考虑下派生类指针传递到该函数时的问题,如果有虚函数VPTR也被拷贝成派生类的了
}
st a;
st* b = new st;
st c;
a = b; //触发方法1
a = c; //触发方法2
st *p = ...;
st xxx;
xxx = p;