| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1031 人关注过本帖
标题:[求助]关于析构函数
只看楼主 加入收藏
yuanlaishini
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-11-2
收藏
 问题点数:0 回复次数:4 
[求助]关于析构函数

各位好!小弟有一个问题想请教,还请各位多多指教一下!是关于c++问题.

#include <iostream.h> #include <string.h> #include <stdlib.h> class sample{ char *s; public: sample(); sample(const sample &ob); ~sample(){if(s) delete []s; cout<<"Freeing s\n";} void show() {cout<<s<<"\n";} sample operator =(sample &ob); void set(char *s); };

sample::sample() { s=new char('\0'); }

sample::sample(const sample &ob) { s=new char[strlen(ob.s)+1]; strcpy(s,ob.s); }

void sample::set(char *str) { s=new char[strlen(str)+1]; strcpy(s,str); }

sample sample::operator =(sample &ob) { if(strlen(ob.s)>strlen(s)) { delete []s; s=new char[strlen(ob.s)+1]; } strcpy(s,ob.s);

return *this; }

sample input()  //此函数在创建临时对象(调用复制构造函数)后,调用一次析构函数,当    {          临时对象附给ob对象(调用重载运算符)后销毁,调用一次析构函数. char instr[80];    整个程序结束时,ob被销毁,调用一次析构函数,总共3次,可为什么  sample str;     结果是4次呢?! cout<<"Enter a string:\n"; cin>>instr; str.set(instr);

return str; }

int main() { sample ob;

ob=input(); ob.show();

return 0; }

我想结果应是输出3个"Freeing s",可是输出了4个,小弟百思不得其解,还望解释一下!

谢谢!!

搜索更多相关主题的帖子: 函数 
2004-11-02 15:02
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
类的名字不太特别的话请把开头字母大写!
2004-11-02 15:31
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

sample operator =(sample &ob);

你重载了 = 号,所以main函数里用到 = 号的话也要析构。

2004-11-02 15:33
yuanlaishini
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-11-2
收藏
得分:0 
谢谢

我的Blog:http://blog..cn/u/1198315640 Email:jianan.ma@
2004-11-02 16:23
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
得分:0 

厉害


2004-11-08 02:54
快速回复:[求助]关于析构函数
数据加载中...
 
   



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

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