Порядок строительства / инициализации объекта

В каком порядке будут называться ctors?

template<class T>
class A {
public:
static std::function<void(void)> funcobj;
};

template<class T>
std::function<void(void)> A<T>::funcobj = [](){};

class B : public A<B> {
public:
static const int i;

B::B()
{
DoSomethingHere();
};
}inst;

std::function<void(void)> B::funcobj = [](){};

const int B::i = 2;

Я прав, что заказ будет примерно таким?
— const int B :: i -> должен быть жестко закодирован в разделе данных PE-файла и, таким образом, вообще не должен создаваться?
— ctor из std :: function для инициализации A< B> :: funcobj
— Ctor of A
— ctor из std :: function для инициализации B :: funcobj (хотя A< B> :: funcobj и B :: funcobj должны быть технически одинаковыми)
— Ctor B :: B

0

Решение

Сначала статические объявления будут выполнены по порядку. Так:

template<class T> std::function<void(void)> A<T>::funcobj = [](){};
std::function<void(void)> B::funcobj = [](){};

const int B::i = 2;

(если B :: я был тип объекта вместо ИНТ тогда бы его конструктор был бы назван)

Затем, когда дело доходит до инициализации переменной инст, он начнется с инициализации родительского класса, т.е. шаблон класса Аконструктор будет называться.

в конце концов класс Bконструктор будет называться.

1

Другие решения


По вопросам рекламы [email protected]