Каково время жизни объекта структуры данных C ++? - PullRequest
2 голосов
/ 15 июля 2011

Предположим, у меня есть Car.h, который определяет класс с именем Car, и у меня есть реализация Car.cpp, которая реализует мой class Car, например, мой Car.cpp может быть:

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

Каково время жизни массива помощников? Мне нужно сказать static Helper helpers[];? Если я совершил плохую практику, пожалуйста, дайте мне знать.

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Любая переменная, объявленная / определенная в глобальной области видимости, имеет полное время жизни до завершения кода.

Если вы хотите, чтобы ваш Helper helpers[]; был доступен только в Car.cpp, тогда только вы должны объявить егокак static;иначе пусть будет глобальным.Другими словами,

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

Редактировать : As @andrewdski предложил в комментарии ниже;вы должны сделать helpers[] переменной static, так как вы используете ее в этом файле;хотя Helper снаружи не видно.В C ++, если два совершенно разных модуля имеют одинаковые именованные глобальные переменные, компилятор молча создает беспорядок, ссылаясь на одну и ту же область памяти.

2 голосов
/ 15 июля 2011

Объекты, определенные в области видимости файла, называются Static Storage Duration объектами.

В большинстве ситуаций вы можете думать о них как о созданных до того, как main () будет введен и уничтожен после выхода из main () (есть исключения)но я бы не беспокоился об этом).

  • Порядок уничтожения статических переменных длительности хранения является обратным порядком создания.

  • порядок создания в одной и той же единице компиляции (файле) - это порядок, в котором они были объявлены.

    • Примечание. Нет гарантии относительно порядка создания Static Storage Duration объектов в разных единицах компиляции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...