Re[2]: Поясните за деструкторы thread_local (3.6.3/1)
От: Alexander G Украина  
Дата: 15.03.17 19:25
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Тут, скорее, речь вот о чём.

К>Главный поток (который main() ± конструкторы-деструкторы-exit-функции) — это тоже поток.

Ну если в этом смысле, то хорошо.
Я уже начал думать, что нельзя иметь синглтон с потоком и с его завершением в деструкторе не только в DLL, но и в С++...

К>И его завершение происходит в таком порядке:

К>- вышли из main
К>- выполнили деструкторы TLS-объектов
К>- выполнили деструкторы SS-объектов, инициализированных по требованию
К>- выполнили деструкторы SS-объектов

Последнее и предпоследнее не может вперемешку выполнятся?

Вроде реализации не разделяют:
http://ideone.com/yq6NJr
#include <iostream>
#include <string>
using namespace std;
 
int g_tab = 1;
struct X {
    int tab;
    const char* name;
    X(const char* name) : name(name), tab(g_tab++) {
        cout << string(tab, '\t') << name << " : ctor" << endl;
    }
    ~X() {
        cout << string(tab, '\t') << name << " : dtor" << endl; }
};
 
struct Y {
    Y() {
        static X s2("s2");
    }
};
 
Y y;
 
X g1("g1");
X g2("g2");
 
 
int main() {
    cout << "start!" << endl;
    static X s1("s1");
    cout << "finish!" << endl;
}

    s2 : ctor
        g1 : ctor
            g2 : ctor
start!
                s1 : ctor
finish!
                s1 : dtor
            g2 : dtor
        g1 : dtor
    s2 : dtor



К>// первое обращение к TLS провоцирует инициализацию всех TLS-объектов


А в MSVC сразу при старте потока (из TLS Callback). Это implementation-defined, или кто-то нарушает?
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.