对象的是怎么死的?

原创 2004年07月16日 13:45:00

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

今天复习了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 . . .

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

结论:

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

JVM如何判断对象"死"和"活"

堆中存放着几乎所有的
  • yyywyr
  • yyywyr
  • 2014年09月15日 23:55
  • 2018

jvm学习笔记:第3章java判断对象是否死亡

3.2.2 根搜索算法 在主流的商用程序语言中(Java和C#,甚至包括前面提到的古老的Lisp),都是使用根搜索算法(GC Roots Tracing)判定对象是否存活的。这个算法的基本思路就...
  • sbvfhp
  • sbvfhp
  • 2015年02月01日 14:12
  • 1301

map里面放的list,list放的是对象,怎么遍历

map里面放的list,list放的是对象,怎么遍历  分享| 2010-06-26 14:32huajuande | 浏览 4872 次  软件开发 2010-06-2...
  • evilcry2012
  • evilcry2012
  • 2016年03月28日 10:26
  • 3951

java 如何判断对象已死

已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加1;当引用失效时,计数器减1;任何时...
  • fjkxyl
  • fjkxyl
  • 2017年04月11日 14:50
  • 318

【003】【Java虚拟机——对象已死判定】

垃圾收集器在对堆进行回收前,首先要做的事情就是要确定这些对象之中哪些还“存活”着, 哪些已经“死去" (即不可能再被任何途径使用的对象)。...
  • DERRANTCM
  • DERRANTCM
  • 2015年03月18日 14:24
  • 1361

C++对象是怎么死的?Win32线程篇

在前面的帖子 里聊完了进程终止对C++对象析构的影响。今天咱们来说一下线程对于C++对象析构的影响。  由于C++ 03标准没有包含线程的概念,而C++ 0x尚未正式发布。所以对线程的讨论只好根据特定...
  • xujianccse
  • xujianccse
  • 2011年05月10日 13:24
  • 103

C++对象是怎么死的?POSIX线程篇

上一个帖子 聊完了Win32环境下和线程有关的C++对象死亡问题,今天得说一说POSIX的线程库pthread了。如果你对pthread不太了解,可以先看看维基百科 的介绍。  ★三种死法   废话少...
  • xujianccse
  • xujianccse
  • 2011年05月10日 13:20
  • 169

DLL中传递STL参数,vector对象作为dll参数传递等问题(转) (坑死我了)

STL跨平台调用会出现很多异常,你可以试试. STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问...
  • CAICHAO1234
  • CAICHAO1234
  • 2013年04月04日 16:18
  • 710

JVM学习笔记(三)—— 对象之死

收集的对象:已死的对象一. 如何判断对象已死?1.浅谈引用引用分为四种:强引用,软引用,弱引用,虚引用。 这四种引用强度依次减弱。强引用:类似于“Object obj=new Object()”这类引...
  • CSDN_soul
  • CSDN_soul
  • 2017年11月15日 17:17
  • 50

面向对象编程已死

 Posted in 批评评论 | 9 Comments 那好吧,也许是没死,但卡内基.梅隆大学的Robert Harper教授却说(Teaching FP to fre...
  • kexin1212
  • kexin1212
  • 2014年04月08日 11:11
  • 237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对象的是怎么死的?
举报原因:
原因补充:

(最多只允许输入30个字)