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.