2015-11-21 4 views
1

Я очень хорошо знаю общую проблему с заданием статического конструктора, однако мне любопытно узнать, применимо ли это и в случае композиции.Правильно ли задан статический конструктор с составом

Скажем, у меня есть следующие:

#include <vector> 
using std::vector; 

class Foo 
{ 
    static vector<int> myVector; 
    Foo(int i) { myVector.push_back(i); } 
    ~Foo() {} 
}; 

vector<int> Foo::myVector; 
Foo foo_1(1); 
Foo foo_2(2); 

у меня есть какие-либо гарантии того, что т е р myVector будет вызываться перед любой из вызовов на CTOR Foo в?

Само собой разумеется, проверяя это и обнаружив, что он работает так, как надеется, ничего не доказывает.

+0

Внутри того же самого ТУ статическая инициализация фактически упорядочена (исключение экземпляра шаблона). Проблема в том, что у вас разные ТУ. –

+0

Порядок четко определен _inside_ a единица перевода – sehe

+0

@vsoftco, пожалуйста, укажите, что это дубликат, потому что я искал экстенсивно и не мог найти ничего, что конкретно затрагивает эту конкретную проблему, в частности, имеет ли состав какой-либо эффект. Благодарю. – dgnuff

ответ

1

Заказ не определен в разных единицах компиляции. В том же компиляционном блоке порядок четко определен: тот же порядок, что и определение.

Таким образом, ваш вектор будет инициализирован до foo_1 и foo_2.