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

tag:指针指向临时变量 构造/析构,该怎么处理

2012-02-21 
tag:指针指向临时变量构造/析构没事做想到了个问题,源码大体如下class text{int npublic:text(int a)voi

tag:指针指向临时变量 构造/析构
没事做想到了个问题,源码大体如下
class text
{
int n;
public:
text(int a);
void show();
~text();
};
text::text(int a)
{
cout<<a<<":构造"<<endl;
n=a;
}
text::~text()
{
cout<<n<<":析构"<<endl;
}
void text::show()
{
cout<<n<<endl;
}

text get(int a);
void main()
{
text*p;
p=&get(2);
p->show();
}
text get(int a)
{
return text(a);
}
显示结果:
2:构造
2:析构
2

我的问题是为什么只有一个构造和析构函数,而且在p->show()之前临时变量析构了,那p指向什么,为什么没有构造的显示,那接着为什么p->show()又能显示出2,最后为何没有析构的显示

[解决办法]
而且在p- >show()之前临时变量析构了--> 在get函数返回时,临时变量已经析构了

那p指向什么 ---> 指向已经析构的对象在内存中的位置。这时因为内存中的东西没有被覆盖。

为什么没有构造的显示 ---> 没有新创建对象,不会有构造的。

接着为什么p- >show()又能显示出2 --->这时因为内存中的东西没有被覆盖。代码会执行的。


最后为何没有析构的显示-->没有新创建对象,不会有析构的。

note: 不要写这样的代码, 不要以为这样代码也可以运行, 就不去管了。由于零时变量的在离开作用域后, 它所处的资源
随时会被其他程序用掉。 这样你的程序就会crash了。
[解决办法]
Return value of *get* function is rvalue. so you can not compute its address. It works just because your program is lucky.

热点排行