Создание нового безымянного объекта не является атомарным, но это не обязательно.[Как указано выше, любое исключение будет просто влиять на время жизни временного объекта, созданного до того, как он будет назначен атомарному элементу, и должно очищаться нормально.]
Назначение этого временного указателя на ваш атомарный указательявляется атомарным.
Моя большая проблема в том, что в настоящее время ваш код не может определить, выполнил ли другой поток назначение, поэтому вам придется рассмотреть возможность использования testandset или swap.Тогда у вас возникают проблемы с неудачной проверкой / обменом, и у вас есть временный указатель на объект, который вам больше не нужен.
Если вы используете локальную переменную (а не безымянную временную), вы получаетешанс убрать это.
Если вы используете умный указатель для атомарного и временного, он самоуничтожится.
Однако во многих случаях будет лучше, если вы не создадите временный объект, если вы на самом деленужно, но это означает, что у вас есть мьютекс во всем творении, но вы можете сделать небольшую проверку перед входом в мьютекс.Это больше похоже на то, что делают одноэлементные статические переменные.
Нет реального недостатка, если вы создаете синглтон, так как другим потокам все равно придется ждать.