<class _Ty>
class _Ref_count : public _Ref_count_base { // handle reference counting for pointer without deleter
public:
explicit _Ref_count(_Ty* _Px) : _Ref_count_base(), _Ptr(_Px) {}
private:
virtual void _Destroy() noexcept override { // destroy managed resource
delete _Ptr;
}
virtual void _Delete_this() noexcept override { // destroy self
delete this;
}
_Ty* _Ptr;
};
Если назвать без _, пользователь сможет написать, например, #define Destroy 42 перед инклудом библиотеки и всё сломается
кто в здравом уме это будет делать?
int_type у меня #define int_type int и все
ну например Qtшним #define slot можно сломать python
ломаются все, если делать чертовщину
Мне однажды пришлось переименовывать метод emit на invoke в библиотеке интеграции с qt для.
так это лечится через undef/define
У библиотеки есть интерфейсная часть (предоставление которой заявляется Стандартом и использовать которую в качестве макроимен он же запрещает), а также произвольные имена имплементации, под которые Стандартом отведены идентификаторы, начинающиеся с андерскора, за которым следует прописная буква, либо содержащие последовательность из андерскоров (либо начинающиеся с андерскора - в глобальной области видимости). Edit: На всякий случай, правила для имен пользовательских литеральных суффиксов содержат исключение.
Неплохо. Я не догодался.
Что за магия числа 42?
Ответ на главный вопрос
Это особенное число. Почему оно особенное хотите вы спросить? Особенным могло бы быть любое другое, но тогда бы вы спрашивали о нём. * Вольная цитата Артура Кларкс.
юзер дефайнед литералы _<name> это довольно неудобно
Обсуждают сегодня