| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 539 人关注过本帖
标题:有复制构造函数时最后析构函数的顺序问题
取消只看楼主 加入收藏
xxmmxmxm
Rank: 2
等 级:论坛游民
帖 子:9
专家分:11
注 册:2013-8-19
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:1 
有复制构造函数时最后析构函数的顺序问题
#include<iostream>
#include<string>
using std::cout;
using std::endl;
class my
{
private:
       char *pname;
       int len;
       static int mys;
public:
      my(char *p);
      my();
      ~my();
      my(const my&);
       void showp();
};
int my::mys=0;
my::my(const my & s)   //复制构造函数
{
    mys++;
    cout<<"this is copy hanshu:  ";
}
my::my(char *p)       //普通构造函数
{
    len=strlen(p);
    pname=new char[len+1];
    strcpy(pname,p);mys++;}

my::my()
{
    len=4;
    pname=new char[len];
    strcpy(pname,"C++");
    mys++;
}
void my::showp()    //自定义函数
{
    cout<<pname<<endl;
}
my::~my()           //析构函数
{
    mys--;cout<<pname<<" left"<<mys<<";\n";
}

void show(my s){s.showp();}    //自定义函数

int main()
{
    my my1="tets";
    show(my1);
}

输出结果是(这个荅?什么的是乱码):
this is copy hanshu:  
荅?left1;
tets left0;
Press any key to continue


有个地方不懂了,书上说自动存储对象被删除的顺序与创建顺序相反,那么理论上输出结果应该是这样的:
this is copy hanshu: tets
tets left1;
荅?left0;
Press any key to continue

求指教,哪里弄错了,第一次发帖哈哈
搜索更多相关主题的帖子: private include public 
2013-08-19 19:59
xxmmxmxm
Rank: 2
等 级:论坛游民
帖 子:9
专家分:11
注 册:2013-8-19
收藏
得分:0 
忘了在析构函数里加 delete [] pname;
不加这行代码问题也不大啊,my1和创建的副本对象的pname都指向同一个字符串
2013-08-19 20:16
快速回复:有复制构造函数时最后析构函数的顺序问题
数据加载中...
 
   



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

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