首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大家帮忙分析一个小程序, 输出结果感觉有有关问题

2012-02-27 
大家帮忙分析一个小程序, 输出结果感觉有问题!程序如下,其中类Obj_trace的作用在于跟踪,类Array的作用相当

大家帮忙分析一个小程序, 输出结果感觉有问题!
程序如下,   其中类Obj_trace的作用在于跟踪,   类Array的作用
相当于容器,   里面存放的是Obj_trace对象。
#include   <iostream>
using   namespace   std;

class   Obj_trace
{
public:
Obj_trace():sz(++count)
{
cout < < "Object   " < <sz < < "   constructed " < <endl;
}
~Obj_trace()
{
cout < < "Object   " < <sz < < "   destroyed " < <endl;
}
Obj_trace(const   Obj_trace&   rhs):sz(++count)
{
cout < < "Object   " < <sz < < "   constructed " < <endl;
}
Obj_trace&   operator=(const   Obj_trace&   rhs)
{
return   *this;
}
private:
static   int   count;
int   sz;
};

int   Obj_trace::count   =   0;

template <class   T>
class   Array
{
public:
Array(int   n=0):data(new   T[n]),   sz(n){}
~Array()
{
delete[]   data;
}
Array(const   Array&   rhs)
{
Init(rhs.data,   rhs.sz);
}
Array&   operator=(const   Array&   rhs)
{
if   (&rhs   !=   this)
{
delete[]   data;
Init(rhs.data,   rhs.sz);
}
return   *this;
}
private:
T*   data;
int   sz;
void   Init(T*   p,   int   n)
{
data   =   new   T[n];
sz   =   n;
//for   (int   i=0;   i <n;   i++)
//data[i]   =   p[i];
}

};

int   main()
{
Array <Obj_trace>   x(3);
Array <Obj_trace>   y   =   x;
x   =   y;

return   0;
}
调试环境:   Visual   C++6.0。
输出结果为:
Object   1   constructed
Object   2   constructed
Object   3   constructed
Object   4   constructed
Object   5   constructed
Object   6   constructed
Object   3   destroyed
Object   2   destroyed
Object   1   destroyed
Object   7   constructed
Object   8   constructed
Object   9   constructed
Object   6   destroyed
Object   5   destroyed
Object   4   destroyed
Object   9   destroyed
Object   8   destroyed
Object   7   destroyed
我个人理解的输出结果应该如下,也就是对象4,5,6应该在7,8,9之后销毁,
因为对象4,5,6比7,8,9先创建。可实际结果却是4,5,6先销毁,请大虾指点!
Object   1   constructed
Object   2   constructed
Object   3   constructed
Object   4   constructed
Object   5   constructed
Object   6   constructed
Object   3   destroyed
Object   2   destroyed
Object   1   destroyed
Object   7   constructed
Object   8   constructed
Object   9   constructed
Object   9   destroyed
Object   8   destroyed
Object   7   destroyed
Object   6   destroyed
Object   5   destroyed
Object   4   destroyed

[解决办法]
抱歉,搞错了
------解决方案--------------------


就是一种嵌套关系,可以理解为构造函数和析构函数入栈出栈的顺序。

热点排行