曲径通幽论坛

标题: 深复制与浅复制 [打印本页]

作者: beyes    时间: 2013-9-30 15:05
标题: 深复制与浅复制
默认的复制构造函数会逐个复制非静态成员及成员的值(如直接将一个对象通过赋值运算符赋值给另外一个对象时),这种成员复制也称为“浅复制”。浅复制最容易带来的问题是,两个类中的指针都指向同一个内存地址;这样当其中一个对象调用析构函数销毁自己时,内存被释放,这样就会让另一个对象的指针无的放矢,此外在调用析构函数时,会进行第二次内存释放,这是一种错误。

解决上述问题的办法是,提供一个重载的赋值运算符,它的实现与复制构造函数类似,在其中,不只是简单的复制指针地址,而是将指针所指向的内存中的内容也复制过来,这就是 深度复制。如下面代码所示:
[C++] 纯文本查看 复制代码
StringClass & StringClass::operator = (const StringClass &st)
{
   if (this == &st)
      return *this;   //如果是赋值给自己就直接返回

   delete [] str;      //释放原来的内存区

   len = st.len;
   str = new char [len + 1];   //新指向内存区的长度

   std::strcpy(str, st.str);      //拷贝字符串,这个就是“深复制” 了

   return *this;    // 返回调用对象的引用
}








欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2