鱼C论坛

 找回密码
 立即注册
查看: 4052|回复: 1

小甲鱼C++教程第36讲副本构造器问题

[复制链接]
发表于 2012-9-4 19:24:41 | 显示全部楼层 |阅读模式
4鱼币
本帖最后由 魁拔 于 2012-9-4 19:27 编辑

小甲鱼C++教程第36讲的副本构造器问题
#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()
{
        delete ptr;
}
MyClass& MyClass::operator = ( const MyClass &rhs )
{
        if( this != &rhs )
        {
                delete ptr;//这句话是做什么的,去掉了对结果没有影响,我试过的
                ptr = new int;//这句话是做什么的,去掉了对结果没有影响,我试过的
                *ptr = *rhs.ptr;
        }
        else
        {
                std::cout << "赋值号两边为同个对象,不做处理!\n";
        }
        return *this;
}
void MyClass::print()
{
        std::cout << *ptr << std::endl;
}
int main()
{
        MyClass obj1( new int(1) );
        MyClass obj2( new int(2) );//副本构造器究竟是什么东东,还是迷糊迷糊,求明白人讲讲,谢谢了
        //可以在前面先定义,就像这样,int i = 1, j = 2,
        //然后直接在这里用MyClass obj1( &i );MyClass obj1( &j );
        //但是我试过了,不可以,求解释       
        obj1.print();
        obj2.print();
        obj2 = obj1;
        obj1.print();
        obj2.print();
       
        return 0;
}

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-4 20:50:01 | 显示全部楼层
这个例子不太好
你说的第一个问题 他是指针指向的值赋值 所以不用深拷贝 释放也没问题
如果直接用指针赋值 不先delete会重复释放
第二个问题因为析构时delete栈空间

搜下深拷贝 智能指针 引用计数吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-14 23:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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