Форум
C/C++
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, vdimas, Вы писали: V>Здравствуйте, σ, Вы писали: V>>>Результат начинает свой лайфтайм после возврата из хелпера-инициализатора. σ>>Т.е. внутри [tt]buildMap[/tt] [tt]result[/tt] обозначает объект вне лайфтайма? Значит на нём нельзя вызывать методы. V>Забавные рассуждения, однако. )) V>(у меня там были описки, исправил исходный пример http://www.rsdn.org/forum/cpp/8581544.1) V>Переменная result внутри метода имеет свой лайфтайм, не связанный с оным у переменной someDictionary. V>Что касается оптимизации возвращаемого значения - это низкоуровневая механика компилятора, ничего не меняющая в семантике исходного кода (если конструктор/деструктор без побочных эффектов). V>На проблемы тут можно нарваться только в динамической фазе инициализации глобальных переменных, если переменная someDictionary глобальная и кто-то её юзает до инициализации или умудрился создать в коде динамической инициализации еще один поток и оттуда юзает эту переменную одновременно с наполнением её данными из основного потока. V>(после инициализации иммутабельного someDictionary к нему безопасно обращаться из разных потоков без блокировки) V>Главное то, что упомянутые бока могут возникнуть даже для классического полностью иммутабельного объекта, инициализирующего все свои поля в конструкторе, т.е. указанный трюк не добавляет никаких новых эффектов к ошибкам, связанным с использованием глобальных неинициализированных переменных. :xz:
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …