Информация об изменениях

Сообщение Re: Порядок создания объектов от 01.06.2023 9:19

Изменено 01.06.2023 13:11 CRT

Re: Порядок создания объектов
Здравствуйте, _NN_, Вы писали:

_NN>
_NN>Tool tool{};

_NN>std::thread toolRunner([]() {
_NN>    printf("Starting tool");
_NN>});
_NN>

_NN>Какие мысли ?

я конечно подотстал в новых стандартах в с++.
Но у тебя в коде указан сначала вызов конструктора для Tool, а потом для std::thread
я не вижу отличий между вызовом двух конструкторов последовательно в одном потоке один за другим (что ты и делаешь — у тебя конструкторы в одном потоке вызываются) и просто вызовом двух функций последовательно в одном потоке.
Например
a();
b();

как компилятор может сначала вызвать b() перед a()?
у меня это в голове не укладывается. Такого быть не должно.

Поэтому мой ответ такой. Конструктор Tool полностью отработает до того как вызовется конструктор std::thread
и поэтому printf("Starting tool") вызовется когда tool уже создан.
Re: Порядок создания объектов
Здравствуйте, _NN_, Вы писали:

_NN>
_NN>Tool tool{};

_NN>std::thread toolRunner([]() {
_NN>    printf("Starting tool");
_NN>});
_NN>

_NN>Какие мысли ?

я конечно подотстал в новых стандартах в с++.
Но у тебя в коде указан сначала вызов конструктора для Tool, а потом для std::thread
Я не вижу отличий между вызовом двух конструкторов последовательно в одном потоке один за другим (что ты и делаешь — у тебя конструкторы в одном потоке вызываются) и просто вызовом двух функций последовательно в одном потоке.
Например
a();
b();

как компилятор может сначала вызвать b() перед a()?
у меня это в голове не укладывается. Такого быть не должно.

Поэтому мой ответ такой. Конструктор Tool полностью отработает до того как вызовется конструктор std::thread
и поэтому printf("Starting tool") вызовется когда tool уже создан.