У меня есть вопрос по поводу определения виртуального деструктора в заголовочном файле.
Например, есть заголовочный файл, который содержит:
class Object
{
public:
virtual ~Object(){}
// ...
};
Я лишь недавно столкнулся с кодом, подобным этому. Прежде, я считал, что любую реализацию нужно писать в .cpp
файле, чтобы при подключении заголовка в разных единицах трансляции не возникло множественных определений.
Мои вопросы:
Стандарте
и в каком месте об этом можно почитать?Заранее благодарю за помощь.
Действительно ли виртуальный деструктор можно определять в заголовочном файле?
Да, это можно сделать in-place, как в Вашем примере, можно вынести определение за пределы объявления класса, и, наконец, можно пометить деструктор как default:
inline Object::~Object() {}
virtual ~Object() = default;
Можно ли что-то еще определять в заголовочном файле (речь про методы и функции)?
Да, можно.
Если что-то и можно определять в заголовочном файле, то должно ли это нечто быть пустым, как в примере с ничего не делающим виртуальным деструктором?
Нет, не должно.
В каком Стандарте и в каком месте об этом можно почитать?
Можно. Любой метод, функцию или переменную можно определять в заголовочном файле, при условии что они являются inline.
Любой метод можно определять в заголовочном файле. Делать это можно либо прямо в определении класса (как в вашем примере), либо после определения класса с указанием ключевого слова inline
.
Нет, не должно.
В любом стандарте С++ почитать про спецификатор inline
, его связь с Правилом Одного Определения (ODR), inline-функции и способы определения методов класса как inline.
Тема inline-переменных появляется в С++17.
Единственной тонкостью тут является то, что если вы захотите объявить некий метод класса как pure virtual, но при этом еще и предоставить для него определение, то это определение должно находиться за пределами определения класса.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я провожу небольшое исследование существующих способов нарушить ODR (Правило Единого Определения) при использовании inline, и меня интересует...
Назовём число счастливым, если оно делится на k и сумма его цифр лежит в интервале [p, q]Нужно подсчитать, сколько счастливых чисел лежат в интервале...
Есть 2 числа, нужно найти за короткое время на КАКИЕ числа они оба делятся без остатка? Как это можно сделать? Если пытаться обычным циклом,...