posts - 3,  comments - 0,  trackbacks - 0

是指对象从创建到被销毁的整个过程。

对象的创建有三种方式,它们的生命周期各不相同:
1、通过定义变量创建对象。 这种情况下变量的作用域,决定了对象的生命周期。 进入变量作用域,对象被创建,退出变量作用域,对象被销毁。 global变量,在进入main之前被创建,退出main之后,全局对象才会被销毁。 静态变量作用域不是整个程序,但是存储在 全局/静态数据区。因此静态变量第一次进入作用域时被创建,直到程序退出时被销毁。

#include <stdio.h>
#include <stdlib.h>
class A {
public:
    A() {printf("A created.\n"); }
    ~A() {printf("A destroyed.\n");}
};
class B {
public:
    B() {printf("B created.\n");}
    ~B() {printf("B destroyed\n");}
};
A globalA;
int foo(void)
{
    printf("\nfoo()---->\n");
    A localA;
    static B localB;
    printf("foo() <----\n");
    return 0;
}
int main(void) {
    printf("main()---->\n");
    foo();
    foo();
    printf("\nmain()<----");
    return 0;
}

输出结果为:
A created.
main()---->
foo()---->
A created.
B created.
foo()<----
A destroyed.  // 退出函数之后,局部对象才会被销毁。
foo()---->
A created.      // 第二次进入,静态变量不会被再次初始化。仅在第一次进入作用域时初始化
foo()<----
A destroyed.
main()<----
B destroyed.   // 程序退出时,静态变量才会被销毁。
A destroyed.   // 程序退出后,全局对象被销毁。。。                是先销毁静态变量,再销毁全局变量吗?还是各个编译器会有不同的实现?

中间临时变量的创建和销毁(通常是隐式的),虽然生命周期很短,不易被开发人员察觉,但是常常是造成程序性能下降的瓶颈。

posted on 2009-09-05 15:26 thinke365 阅读(268) 评论(0)  编辑 收藏 引用 所属分类: 性能优化

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理