Скажите, что я определил переменную, подобную этой (C ++):
static const char str[] = "Here is some string data";
И у меня есть статически размещенный экземпляр класса, который ссылается на этот массив в его деструкторе, может ли это пойти не так? Например. может ли переменная str как-то стать недействительной?
class A {
~A() {
cout << str << endl;
}
};
static A a;
Я предполагаю, что это не может пойти не так, но я могу найти это четко изложенным где угодно. Я хочу знать это наверняка. Я предполагаю, что мы не можем предсказать последовательность вызова деструкторов для статически размещенных объектов, но сами данные никогда не освобождаются до тех пор, пока процесс не будет сорван. Значения указателей на POD должны быть безопасными, но не экземпляры объектов.
Значение, например, это:
static const QString str = "Here is some string data";
или
static const std::string str = "Here is some string data";
Нельзя безопасно использовать в деструкторе A , поскольку они оба распределяют свои строковые данные в куче, и это может быть освобождено деструктором до вызова деструктора A .
Верно ли мое предположение, и есть ли в стандарте C ++ какие-либо разделы, объясняющие эту или какую-либо ссылку на какой-либо другой орган, который может это проверить?