有关拷贝构造的用法?

cnepine 2003-10-22 03:12:03
在c++中,何时才能用到拷贝构造函数,应该如何运用拷贝构造函数?
...全文
55 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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了,就会出错,这时就需要这个东东来帮忙解决问题了,还不懂的话,留言给我,我给你一个例子.

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧