C ++数据结构对象的生命周期是多少?

时间:2011-07-15 03:08:44

标签: c++ data-structures object-lifetime

假设我有一个Car.h来定义一个名为Car的类,我有实现Car.cpp来实现我的class Car,例如我的Car.cpp可以是:

struct Helper { ... };
Helper helpers[] = { /* init code */  };
Car::Car() {}
char *Car::GetName() { .....}

辅助阵列的生命周期是多少? 我需要说static Helper helpers[];吗? 如果我做了一些不好的做法,请告诉我。

2 个答案:

答案 0 :(得分:3)

在global / namespace范围内声明/定义的任何变量都有一个完整的生命周期,直到代码结束。

如果您希望Helper helpers[];只能在Car.cpp内访问,那么只有您应该将其声明为static;否则让它成为全球性的。换句话说,

Helper helpers[];        // accessible everywhere if `extern`ed to the file
static Helper helpers[];  // accessible only in `Car.cpp`

修改:正如,@ andrewdski在下面的评论中提出的那样;您应该将helpers[]设为static变量,因为您在此文件中使用它;即使外面看不到Helper。在C ++中,如果2个完全不同的单元具有相同的命名全局变量,则编译器静默通过将它们引用到相同的内存位置来创建混乱。

答案 1 :(得分:2)

在文件范围定义的对象称为Static Storage Duration个对象。

在大多数情况下,您可以将它们视为在main()输入之前创建并在main()退出后销毁(有例外但我不担心)。

  • 静态存储持续时间变量的破坏顺序与创建顺序相反。

  • 同一编译单元(文件)中的创建顺序是它们的声明顺序。

    • 注意:不保证在不同编译单元中创建Static Storage Duration个对象的顺序。