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

c++中的析构函数

gold615 发布于 2015-10-01 16:11, 543 次点击
c++中的析构函数看书上说是程序运行到最后的时候会自动调用,但是如果在程序运行中调用呢?按理说一旦调用析构函数,变量就应该不存在了吧,但是这里却明确显示这个被提前析构后的参数依然存在,而且最后又被析构了一次,是程序自动跳过了主动析构函数的执行?我用的是cfree编译的。
#include<iostream>
using namespace std;
class Location
{
    public:
        Location(int x,int y);
        ~Location();
        int Get_X();
        int Get_Y();
        //void f(Location p);
    private:
        int X,Y;
};
Location::Location(int x,int y)
{
    cout<<"location called\n";
    X=x;Y=y;
}
Location::~Location()
{
    cout<<"destructor\n";
}
int Location::Get_X()
{
    return X;
}
int Location::Get_Y()
{
    return Y;
}
void f(Location p)
{
    cout<<p.Get_X()<<'\t'<<p.Get_Y()<<endl;
}
main()
{
    Location A(1,2);
    A.~Location();//为什么这个地方调用析构函数后,依下边的函数依然可以打印出A的元素?
    cout<<A.Get_X()<<endl;
    f(A);
}
5 回复
#2
诸葛欧阳2015-10-01 21:51
析构函数不能自己调用吧?
#3
linan032015-10-01 21:56
显式调用析构函数的时候,只是单纯执行析构函数内的语句,不会释放栈内存,摧毁对象
#4
yangfrancis2015-10-01 22:04
从运行状况来看应该是如三楼所说
#5
gold6152015-10-01 22:28
确实好像看起来是这样 只能由系统自己调用
#6
TonyDeng2015-10-04 22:32
1