Почему деструктор не может иметь ссылочные квалификаторы?C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Почему деструктор не может иметь ссылочные квалификаторы?

Сообщение Гость »


Есть ли причина (кроме потому что так сказано в стандарте), почему следующий код не разрешен?

struct Foo { ~Фу() && {} ~Фу() и {} }; Я знаю, что это незаконно, но хочу знать, почему.

Я думал о старой доброй проблеме избегать неназванных экземпляров, то есть при использовании защитных объектов, например:

void do_something() { std::lock_guard{my_mutex}; // некоторая синхронизированная операция } Это легальный код, но он явно подвержен ошибкам, поскольку защита блокировки будет уничтожена сразу после ее создания, поскольку это временный (безымянный) объект.

Я планировал сделать что-то подобное

struct Foo { ~Foo() && = удалить; ~Foo() & = по умолчанию; }; и получите ошибку компилятора, если тип создан как временный.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»