注册 登录
编程论坛 C++教室

为什么这个程序是先析构b,再析构a?

chliu2012 发布于 2010-06-06 17:15, 1013 次点击
为什么这个程序是先析构b,再析构a?
#include<iostream>
#include<string>
using namespace std;
class ren
{
private:
 string _nm;
public:
 ren(string nm);
 ~ren();
 ren(ren & ren);
 void say(){cout<<"i am :"<<_nm<<endl;}
};
ren::ren(string nm)
{
 _nm=nm;
  cout<<_nm<<" appear"<<endl;
}
ren::~ren()
{
 cout<<_nm<<" disappear"<<endl;
}
ren::ren(ren & kk)
{
  cout<<kk._nm<<" copy edition"<<endl;
  _nm=kk._nm+" copy edition";
}
void main()
{
  ren a("至尊宝");
  a.say();
  ren b(a);
  b.say();
}
12 回复
#2
gaoce2272010-06-06 17:39
书上是这样写的:先构造的后析构,后构造的先析构。相当于一个栈:先进后出。当然也得特性相同的才符合,如涉及到不同的作用域和存储类别,得另说另论。
#3
lijm19892010-06-08 11:54
函数调用时的局部变量的入栈出栈,可以去网上了解下。
#4
南国利剑2010-06-08 13:05
回复 楼主 chliu2012
析构的顺序正好和构造的顺序相反。
记住这个就可以了。
#5
guowei37582010-06-08 16:09
以下是引用南国利剑在2010-6-8 13:05:47的发言:

析构的顺序正好和构造的顺序相反。
记住这个就可以了。
先构造的后析构
#6
华仔li2010-06-10 00:33
析构的顺序正好和构造的顺序相反
#7
laigaoat20052010-06-10 07:50
先入后出
#8
Alar302010-06-10 08:11
以下是引用南国利剑在2010-6-8 13:05:47的发言:

析构的顺序正好和构造的顺序相反。
记住这个就可以了。
这个是重点哈
#9
2010-06-10 14:41
好想笑,记住就可以了…你们就是这样学编程的?准备做工人?
#10
夕野先生2010-06-10 15:35
呵呵
#11
stone4212010-06-11 12:48
在main中创建的栈对象,main函数结束就需要把两个对象出栈,这个过程对应对象的析构。
#12
audioMan862010-06-12 16:24
呵呵,局部变量如此,可别把非局部的也这样想
#13
leoshi2010-06-16 16:24
当调用拷贝构造函数时,先要销毁对象的复制品,然后再销毁对像。这样不知道明白不?
1