C++编程失乐园

致力于解决论坛的不足,探讨C++的原理

C++下面的构造拷贝函数和赋值函数

首先我给出一个类
class A
{
public:
   char *p;
   int nlen;
   A();
   A(const char *p1)
   {
      nlen = strlen(p1);
      p = new char[nlen+1];
      strcpy(p,p1);
   }
};
void main()
{
   A a("Hello world");
   A b = a;
}
如果没有构造拷贝函数的话,
这样明显会出现2个问题,
1.a.p和b.p指向同一个内存区域
//2.a.p资源没有释放
3.a和b调用了默认析构函数的话,同一个资源被释放了2次.
这就是没有构造拷贝函数的缺陷
在class A中加入
/*-----------------------------add method ------------*/
A(const A & a1)
{
   nlen = strlen(a1.p);
   p = new char[nlen+1];
  strcpy(p,p1);
}
/*------------------------------end add ---------------*/
这样就加入了构造拷贝函数
明显上面的问题可以解决,
我们可以写更美观一点的代码
void main()
{
   A a("Hello World");
   A b(a);
   cout <<"debug breakpoint is setted here"<<endl;
}

posted on 2006-12-25 10:57 木木头 阅读(252) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(3)

随笔分类(29)

搜索

最新随笔

最新评论