|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 hugfish 于 2012-12-13 17:28 编辑
#include <iostream>
class Person{
public :
Person(int *p);
Person(const Person &person);
Person& operator=(const Person &rhs);
~Person();
void print();
private :
int *p;
};
Person::Person(int *p1){
std::cout << " 进入 构造器" << std::endl;
p = p1;
std::cout << " 退出 构造器" << std::endl;
}
Person::Person(const Person &rhs){
std::cout << " 进入 副本构造器" << std::endl;
*this = rhs;
std::cout << " 退出 副本构造器" << std::endl;
}
Person::~Person(){
delete p;
}
Person& Person::operator=(const Person &rhs){
std::cout << " 进入 重载操作符=函数" << std::endl;
if(this != &rhs){
delete p; //这句重要 因为在给对象初始化时候 很有可能给p赋予了一个地址。如果没有delete 在下面重新给p赋值,则会丢失之前的地址 造成内存泄漏
p = new int; //重新给p分配内存?
*p = *rhs.p;
}else{
std::cout << "同一个变量 不做处理 " << std::endl;
}
std::cout << " 退出 重载操作符=函数" << std::endl;
return *this;
}
void Person :: print(){
std::cout << *p << std::endl;
}
int main(){
Person p1(new int(1));
Person p2(new int(2));
p2 = p1;
p1.print();
p2.print();
std::cout << "------------------------------" << std::endl;
//Person p3; //报错 没有空参数的构造函数
Person p3(new int(3));
Person p4 = p3; //报错 断点 p4中的p指针变量不可用 为什么 我是vc++ 6.0下运行
p3.print();
// p4.print();
return 0;
}
|
|