标题:请教各位一个关于深浅拷贝的问题
只看楼主
lionmusicyj
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2008-9-20
结帖率:100%
 问题点数:0 回复次数:7 
请教各位一个关于深浅拷贝的问题
#include <iostream>
using namespace std;
class String
{
   private:
      char *a;
      int len;
   public:
      void showstr()
      {
       cout<<"string:"<<a<<",length:"<<len<<endl;
      }
      String()
      {
         len=0;
         a=NULL;
      }
      String(const char *p)
      {
         len=strlen(p);
         a=new char[len+1];
         strcpy(a,p);
      }
      ~String()
      {
         if(a!=NULL)
         {
            delete a;
            a=NULL;
         }
      }
};



int main()
{
   String s1("123456");    //上面有个定义的拷贝构造函数,但是我的书上说按照下面这样拷贝会有问题,因为不是 深拷贝,只是一般的浅拷贝,但是我用DEV运行并没有报错,请问各位这是为什么呀?
   String s2(s1);
   s2.showstr();
   system("pause");
   
}
望各位回帖哈 ~!小弟对这种深浅拷贝弄的不是很明白~!谢谢了 ~!
搜索更多相关主题的帖子: 深浅 拷贝 
2008-11-04 00:17
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
得分:0 
上面代码的确是没有错,但如果在实际应用中,它是存在问题的.
String s2(s1);这个拷贝并没有复制字符串,只是将指针的值复制过来了,而不是自己new出来的,这就意味着如果s1被修改或是s1被析构,那么s2中的字符串也会变化.这样就不能达到复制的目的.
建议增加构造器
String(const String & str)
      {
         len=str.len;
         a=new char[str.len+1];
         strcpy(a,str.a);
      }
2008-11-04 02:47
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
http://topic.
LZ你的不是浅拷贝,是深拷贝..浅拷贝是指针赋值,指向同一个内存;深的是把数值复制,开辟一个新的内存区,与原来的不产生干扰.浅拷贝是有问题的,会两次释放同一个内存区...

学习需要安静。。海盗要重新来过。。
2008-11-04 09:48
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
得分:0 
浅拷贝是两个指针 指向同一个地址
如果一个指针被delete的话 那另一个指针 就会 成 "野指针"的
如果再 delete 这个 指针的话 那就会有意想不到的事情发生
2008-11-04 10:45
lionmusicyj
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2008-9-20
得分:0 
呵呵`
差不多搞明白了
是看类在定义的时候有没有牵涉到一些关于地址操作的时候,才有讨论深浅拷贝的意义吧?
2008-11-04 12:40
shmilytong
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2008-10-31
得分:0 
我认为版主忽略了一点,就是在使用strcpy函数时应该加上头文件#include <string>吧
2008-11-04 23:45
tls411323
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-10-26
得分:0 
const 的用法各位高手指点一下
2008-11-05 09:37
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
得分:0 
浅拷贝和深拷贝说的是对象之间的拷贝。比如说,对象A和对象B都含有一个指针,现在想把对象B拷贝到对象A,仅仅把指针拷贝过来,叫做浅拷贝,把指针以及指针指向的内容都拷贝过来,叫做深度拷贝。

学习切忌浮躁.
2008-12-03 15:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-242268-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051875 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved