//临时对象是在堆栈中形成的,析构函数执行后,但是对象仍在那个地方,而且你的指针还指向那里.
//任何时候我们都可以通过指针来调用成员函数,即使是强制类型转换的也可以.
//比如说这样 ((Point *)0)->f();
//上面的解释:非成员函数,与普通的C全局函数一样,存放在代码段里,所以就像普通函数一样,所有Point类的对象或者指针都可以使用,
#include<iostream>
#include<string>
using namespace std;
class Point{
public:
Point() { cout<<"Point()"<<endl;}
~Point() { cout<<"~Point()"<<endl;}
f() {cout<<"f()"<<endl;}
};
int main()
{
string* p=& string(); //临时对象,在将地址赋给P后随即析构,但P还指向原来的地址,但已经无效
Point* p2=& Point(); //与上面的情况相同
((Point*)0)->f();
p2->f();
return 0;
}
/*output*/
/* Point()
~Point()
f()
*/
//通过析构函数我们可以释放资源,那么你再访问这些资源就会无效.
//实例代码如下,程序会崩溃.
//关键【资源】二字
/*#include <iostream>
#include <string>
using namespace std;
class Point{
public:
Point() { cout <<"Point()" <<endl;p="123";}
~Point() { cout <<"~Point()" <<endl;p=NULL;}
void f() {cout <<"f()" <<endl;cout<<p<<endl;}
private:
char *p;
};
int main()
{
string* p=& string();
Point* p2=& Point();
p2->f();
return 0;
}*/