Поскольку я считаю, что для этого требуется, чтобы my_var был сначала сконфигурирован по умолчанию, а затем назначен.
No. Использование оператора =
в объявлении переменной типа класса имеет специальную обработку. Компилятор никогда не будет строить по умолчанию, а затем скопировать объект переменной, как вы думаете. Что на самом деле произошел, а не является:
ТЕмп MyClass
объекта будет скопировать построенный из some_data
, то my_var
будет копировать возведенный из температуры, то температура будет освобождена. Как если бы вы написали это:
MyClass my_var(MyClass(some_data));
компилятор оптимизировать на темп полностью и просто скопировать построить my_var
из some_data
непосредственно.Как если бы вы написали это:
MyClass my_var(some_data);
Это обычное дело, особенно если вы пишете это:
MyClass my_var = some_data;
Вместо этого:
MyClass my_var = MyClass(some_data);
Когда my_var - общая память, это может привести к условиям гонки.
Способ, которым вы его написали, нет. my_var
- либо локальная переменная функции/method, либо глобальная переменная. В любом случае, объявление и назначение переменной в том же самом заявлении не является условием гонки, так как переменная не может использоваться до тех пор, пока она не будет построена. Если вы сначала объявите переменную и назначьте ее в отдельном заявлении, тогда будет условие гонки.
http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-direct-initializati – NPE