鱼C论坛

 找回密码
 立即注册
查看: 3133|回复: 4

c++入门的副本构造器问题

[复制链接]
发表于 2012-12-13 17:04:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-12-13 17:29:20 | 显示全部楼层
没人遇到这个问题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2018-12-20 19:40:54 | 显示全部楼层

回帖奖励 +5 鱼币

帮你顶下帖子,我也不会这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-28 16:22:37 | 显示全部楼层
hugfish 发表于 2012-12-13 17:29
没人遇到这个问题吗

我用code block不会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 09:17:38 From FishC Mobile | 显示全部楼层
应该是版本问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 10:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表