对象的是怎么死的?

原创 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如何判断对象已死?

在java的垃圾回收中,jvm是如何判断堆中的对象是否已死呢?主流的判断方法有两种。  1.引用计数算法:    这种算法的思路是如果某一个对象被别的对象引用,那么就把他们引用计数器加上1,这样当...
  • sbvfhp
  • sbvfhp
  • 2015年02月01日 14:10
  • 765

六、jvm之如何判断对象已死?

在堆里面几乎存放中Java程序运行所动态生成的所有对象,垃圾回收器在对堆进行回收前,第一件事情就是要确定这些对象之中还有哪些存活,哪些已经死去(即不可能再被任何途径使用的对象)。判断的方式有两种:引用...
  • u012839098
  • u012839098
  • 2017年03月31日 20:29
  • 294

Java笔记:[反射篇] 利用反射,获取类中的私有内部类对象,并调用该对象的方法

有时候,你会想使用Android自带的某个控件,但发现某些参数需要重新设置,但是并没有暴露出来修改的入口。 这时反射就可以帮上你的忙了~ 我们以RecyclerView为例,看看反射的使用方法。...
  • bailichun19901111
  • bailichun19901111
  • 2016年03月09日 18:48
  • 3068

面向对象死了吗?

本来打算写一篇介绍OOP的由来,优缺点和适用范围等的理论性的文章。但是读过OOP大师和反对者的一些言论之后,这种想法就没有了。我们从小就受到一种非黑即白的价值理念的教导,事物要嘛是好的,否则就是坏的。...
  • xiaojianpitt
  • xiaojianpitt
  • 2013年04月21日 14:51
  • 9083

java 如何判断对象已死

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

深入理解Java虚拟机笔记---引用类型和对象是否死亡

在JDK1.2以前,Java中的引用定义得很传统:如果reference类型的数值代表的是另外一块内存的起始地址,就称这块内存代表中一个引用。这种定义很纯粹,但太过狭隘,一个对象在这种定义下只有被引用...
  • xtayfjpk
  • xtayfjpk
  • 2014年12月13日 15:42
  • 1013

如何判断对象已死

概述垃圾回收是根据对象是否已死来判断是否回收,那么判断对象存活的算法有哪些,java采用的是哪一种算法,本文将一一道出 一、引用计数法     很多教科书判断对象是否存活的算法是这样昨给对象中添加一个...
  • qq_19827707
  • qq_19827707
  • 2016年06月12日 16:47
  • 185

如何判断对象已死(可杀之)

已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了:引用计数给对象添加一个引用计数器,每当有一个地方引用他,计算器就加1;当引用失效时,计数器减1;任何时刻计数器为0的对...
  • xixiaoming_A
  • xixiaoming_A
  • 2016年08月16日 08:41
  • 246

JVM对象已死吗

1.引用计数器(Reference Counting)   给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,任何时刻计数器为0的对象就是不可能再被使用...
  • tanga842428
  • tanga842428
  • 2016年08月23日 10:11
  • 240

jvm如何判断对象已死?

在java的垃圾回收中,jvm是如何判断堆中的对象是否已死呢?主流的判断方法有两种。 1.引用计数算法:   这种算法的思路是如果某一个对象被别的对象引用,那么就把他们引用计数器加上1,这...
  • liaoqianwen123
  • liaoqianwen123
  • 2014年05月04日 00:56
  • 610
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对象的是怎么死的?
举报原因:
原因补充:

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