Я прочитал много похожих вопросов, связанных с этим (включая этот проницательный: В чем разница между деструктором "= default" и пустым деструктором? ), но ни один из них полностью не ответил на мой конкретный случай. Отличаются ли они в зависимости от того, как они реализованы компилятором? Если это используется как часть общей библиотеки, каков наилучший способ сделать код переносимым? Мне также интересно, есть ли в обоих случаях деструктор - я думаю, что они делают, но я не уверен.
Есть ли разница между этими двумя частями кода?
// Case 1
struct BaseClass {
virtual ~BaseClass() = default;
virtual void func (int a) = 0;
shared_ptr<BaseClass> next;
};
// Case 2
struct BaseClass {
virtual ~BaseClass() {};
virtual void func (int a) = 0;
shared_ptr<BaseClass> next;
};
Оба возвращают "false", когда я проверяю их с помощью std :: is_trivially_destructible :: value, так что я знаю, что они оба нетривиальны.
Спасибо.