//编译器将生成必要的代码把源对象各属性的值分别赋值给目标对象的对应成员
//,以上赋值即 逐位复值bitwise copy
//当某些成员变量是指针时,对象成员进行逐位复值的结果是你将拥有
//两个一模一样的实例,且两副本里的同名指针会指向相同地址
//删除一个对象时,其包含的指针也会被删除,若另外一个副本(对象)也在引用该指针,就会出错
//例子: MyClass obj1; Myclass obj2; obj2 = obj1;
//方法:重载操作符, 如下
//MyClass &operator = (const MyClass &rhs);
#include <iostream>
#include <string>
class MyClass
{
public:
MyClass(int *p);
~MyClass();
MyClass &operator=(const MyClass &rhs);
void print();
private:
int *ptr;
};
MyClass::MyClass(int *p)
{
ptr = p;
}
MyClass::~MyClass()
{
}
MyClass &MyClass::operator=(const MyClass &rhs)
{
if (this != &rhs)
{
delete ptr;
ptr = new int;
*ptr = *rhs.ptr;
}
else
{
std::cout<<"赋值号两边相同对象,不作处理";
}
return *this;
}
void MyClass::print()
{
std::cout<<*ptr<<std::endl;
}
int main()
{
MyClass obj1(new int(1));
MyClass obj2(new int(2));
obj1.print();
obj2.print();
obj2 = obj1;
obj1.print();
obj2.print();
return 0;
}