Почему деструктор не может иметь ссылочные квалификаторы? ⇐ C++
Почему деструктор не может иметь ссылочные квалификаторы?
Есть ли причина (кроме потому что так сказано в стандарте), почему следующий код не разрешен?
struct Foo { ~Фу() && {} ~Фу() и {} }; Я знаю, что это незаконно, но хочу знать, почему.
Я думал о старой доброй проблеме избегать неназванных экземпляров, то есть при использовании защитных объектов, например:
void do_something() { std::lock_guard{my_mutex}; // некоторая синхронизированная операция } Это легальный код, но он явно подвержен ошибкам, поскольку защита блокировки будет уничтожена сразу после ее создания, поскольку это временный (безымянный) объект.
Я планировал сделать что-то подобное
struct Foo { ~Foo() && = удалить; ~Foo() & = по умолчанию; }; и получите ошибку компилятора, если тип создан как временный.
Есть ли причина (кроме потому что так сказано в стандарте), почему следующий код не разрешен?
struct Foo { ~Фу() && {} ~Фу() и {} }; Я знаю, что это незаконно, но хочу знать, почему.
Я думал о старой доброй проблеме избегать неназванных экземпляров, то есть при использовании защитных объектов, например:
void do_something() { std::lock_guard{my_mutex}; // некоторая синхронизированная операция } Это легальный код, но он явно подвержен ошибкам, поскольку защита блокировки будет уничтожена сразу после ее создания, поскольку это временный (безымянный) объект.
Я планировал сделать что-то подобное
struct Foo { ~Foo() && = удалить; ~Foo() & = по умолчанию; }; и получите ошибку компилятора, если тип создан как временный.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Каков пример, когда в результате преобразования lvalue в rvalue удаляются cv-квалификаторы?
Anonymous » » в форуме C++ - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-