有关拷贝构造的用法?

cnepine 2003-10-22 03:12:03
在c++中,何时才能用到拷贝构造函数,应该如何运用拷贝构造函数?
...全文
12 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Flamesong 2003-10-22
daixinwei(无聊的我不听)说的是好的.
  • 打赏
  • 举报
回复
daixinwei 2003-10-22
这是一个必须自己定义拷贝构造的经典例子,由于是我自己打进来的,所以可能会出现语句错误,你自己注意一下就好了.不懂再问我!
#include<iostream.h>
#include<string.h>
class string{
private:
char *st;
public:
string(char *s)
{
str=new char[strlen(s)+1];
stcpy(str,s);
}
void print(){cout<<str<<endl;}
~string(){cout<<"delete..."<<endl;delete str;}
};

void main()
{
string s1="hello";
string s2=s1;
s1.print();
s2.pring();
}
在这个程序里就出现问题了,问题语句是:string s2=s1;
因为这个语句等价于
s2.str=s1.str;
所以在执行析构时由于s2.str和s1.str指向的都是HELLO所以HELLO要被删除两次,所以会产生错误
解决的方法是自己定义一个拷贝初始化:
string::string(string& a)
{
str=new char[strlen(a.str)+1];
strcpy(str,a.str);
}
  • 打赏
  • 举报
回复
daixinwei 2003-10-22
没有关系的,一般来说,很少有人会去没分的贴子!大家都要CSDN的分嘛!一样自己的问题没有人答!上面的答得不知道你明白没有,没明白,可以点一下我的名字然后留言给我,我尽力帮你,我也是个阿菜,大家互相帮忙嘛!呵呵!这个贴子你认为没有用的时候,一定记得选一下管理,然后点一下给分来结贴不然还要扣分的,呵呵!有问题可以问我!
  • 打赏
  • 举报
回复
cnepine 2003-10-22
谢谢你,我是这儿的Freshman,从别人那儿得知的这个地方。
现在还不是太清楚这儿的游戏规则。
不好意思的。
晴多多关照。
  • 打赏
  • 举报
回复
daixinwei 2003-10-22
没分没关系我帮你答
在用一个对象初始化该类的另一个对象时这个东东就有用了
有时初始的是指针,就会出现两个对象的指针指向同一个地址的情况,这时如果你将两个对象都DELETE了,就会出错,这时就需要这个东东来帮忙解决问题了,还不懂的话,留言给我,我给你一个例子.
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.1w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
申请成为版主
帖子事件
创建了帖子
2003-10-22 03:12
社区公告
暂无公告