对象的是怎么死的?

一个对象构造了后,系统构造了后析构与否与编译器有关?

今天复习了C++语言,编了一个小程序。发现一个在对象构造了后,在VC6下面系统会自己调用该类的析构寒暑,而在Dev-C++(使用gcc)下面就不会调用?另外,如果建立的是对象的指针,那么系统是不会自己调用析构函数的。

代码如下:

#include

using namespace std;

class Counter
{

private:
    int elem;
public:
    Counter();
    Counter(int elem);
    ~Counter();
};

static int counter;

Counter::Counter()
{
    elem = 0;
    counter++;
    cout<<"in Counter()"<
 <endl;
    cout<<"counter = "<<endl;
<
}

Counter::Counter(int arg)
{
    elem = arg;
    counter++;
    cout<<"in Counter(int)"<<endl

    cout<<"counter = "<<endl;
<
}

Counter::~Counter()
{  
    counter--;
    cout<<"in ~Counter()"<<endl;

    cout<<"counter = "<<endl;
<
}

int main(int argc, char *argv[])
{
    Counter c1;
    Counter c2;
    Counter c3;
    Counter *cp = new Counter(10);
    cp->~Counter();
 
    return 0;
}

在VC6下的运行结果是:

in Counter()
counter = 1
in Counter()
counter = 2
in Counter()
counter = 3
in Counter(int)
counter = 4
in ~Counter()
counter = 3
in ~Counter()
counter = 2
in ~Counter()
counter = 1
in ~Counter()
counter = 0
Press any key to continue

而在Dev-C++种结果为:

in Counter()
counter = 1
in Counter()
counter = 2
in Counter()
counter = 3
in Counter(int)
counter = 4
in ~Counter()
counter = 3
Press any key to continue . . .

=================================

结论:

在对象的销毁阶段,是否调用析构函数,始于编译器有关的,而不是由语言定义的。所以在实际编程中,这一点对对象生命周期的控制的理解非常实用。:-)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值