您的位置:首页 > 编程语言 > C语言/C++

复制构造函数,赋值操作符,深浅复制,数组转换成vector数据

2015-12-15 11:49 351 查看
//赋值操作符重载

CExample & CExample::operator = (const CExample& RightSides)

{

    nSize=RightSides.nSize; //复制常规成员

    char *temp=new char[nSize]; //复制指针指向的内容 

    memcpy(temp,RightSides.pBuffer,nSize*sizeof(char));

    delete []pBuffer; //删除原指针指向内容  (将删除操作放在后面,避免X=X特殊情况下,内容的丢失)

    pBuffer=temp;   //建立新指向

    return *this

}

拷贝构造函数

CExample::CExample(const CExample& RightSides)

{

    pBuffer=NULL;

    *this=RightSides     //调用重载后的"="

}

调用复制构造函数:

1、一个对象以值传递的方式传入函数体

2、一个对象以值传递的方式从函数返回

3、一个对象需要通过另外一个对象进行初始化

深复制与浅复制

1、在构造函数中,要为指针类型的成员,分配专门的空间。以这条规则构建的复制,称作为深复制

2、所谓浅复制,如同上面出现过的构造函数中处理的一样,直接为数据成员赋值即可

浅复制带来的危害

如果类里面有个数据成员是指针类型,构造函数里面直接进行指针复制,如private:

char *cptr;

public:

Test(char *str)

{

  strcpy(cptr,str);

}

这里就会出现问题,因为cptr没有分配地址,是野指针,这样是很危险,所以要用深复制

private:

char *cptr;

public:

Test(char *str)

{

  cptr=new char[strlen(str)+1];

  strcpy(cptr,str);
}

int a[]={1,2,3,4,5,6};

vector<int> value(a,a+6);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++基本知识