Предположим, я хочу определить две переменные класса {Type}. Конструктор принимает 1 аргумент. Полностью эквивалентны следующие два способа (компиляция в один и тот же объектный код)?
Type a(arg), b(arg);
и
Type a(arg);
Type b(arg);
Этот вопрос возникает после того, как я прочитал страницу, посвященную безопасности исключений --- http://www.gotw.ca /gotw/056.htm Существует рекомендация: «Выполняйте каждое выделение ресурсов (например, новое) в собственном операторе кода, который немедленно передает новый ресурс объекту-менеджеру». Это дает пример: Следующий фрагмент безопасен
auto_ptr t1( new T );
auto_ptr t2( new T );
f( t1, t2 );
Но строка ниже небезопасна
f( auto_ptr( new T ), auto_ptr( new T ) );
Итак, как насчет
auto_ptr t1( new T ), t2( new T );
f( t1, t2 );
Я просмотрел документ стандарта языка C ++, но не нашел ничего, указывающего на эту проблему.
Чтобы замутить воду, как насчет
shared_ptr t1( new T );
shared_ptr t2( t1 );
и
shared_ptr t1( new T ), t2( t1 );