Это не выглядит страннее, чем вызов пустой функции с именем Lock
.
Не то чтобы я предлагал вам думать о функциях просто как о конструкторах с забавными именами (независимо от того, какой у них тип возврата), но синтаксис намеренно похож.
Пока не могу придумать вескую причину для создания, но не использовать Lock
, но:
LockSession(lock);
имеет те же побочные эффекты, которые вы ожидаете от:
acquire_and_then_immediately_release(lock);
Как вы говорите, это очень редко то, что вы хотите, поэтому для обычного читателя вполне может показаться, что это ошибка. Если по какой-то странной причине это то, что вы хотите, и хотите избежать путаницы, вы можете сделать следующее:
{
LockSession session(lock);
// release immediately
}
или, если на то пошло:
void acquire_and_then_immediately_release(Lock &lock) {
LockSession(lock);
}
с тем же эффектом и меньшим шансом поцарапать голову, действительно ли это то, что вы имели в виду, или вы только что совершили общую ошибку: забыли ввести имя и, следовательно, удерживали блокировку меньше времени, чем нужно.
Почему вы хотите приобрести, а затем немедленно снять блокировку? Возможно, потому что вы (ab) используете его как слегка своеобразный семафор. Например, вы могли бы создать группу потоков с удерживаемой блокировкой, и если первое, что делает каждый поток, это, то ни один из них не пройдет мимо него, пока не будет выполнено все создание потока (плюс все остальное, что родитель хочет, чтобы потоки быть в состоянии видеть), и родитель снимает блокировку. Вероятно, есть лучшие примеры объектов, побочные эффекты которых значительны.
Отходя от побочных эффектов, другая возможность состоит в том, что если вы хотите проверить, является ли строка допустимым XML, вы могли бы написать:
xml::dom::Document(mystring);
ожидание исключения для неверных данных. Опять же, код был бы более читабельным, если бы вы вызвали хорошо названную функцию, которая это делает. И построение дерева DOM - не самый эффективный способ проверки XML. Но если класс - это то, что у вас уже есть, то использовать его - самое простое, что работает.
Полагаю, проблема в том, что имя класса редко описывает побочные эффекты его создания и уничтожения. Поэтому одинокий временный по этой причине будет выглядеть странно.