В чем разница между виртуальным деструктором по умолчанию и явно пустым? - PullRequest
0 голосов
/ 06 мая 2018

Я прочитал много похожих вопросов, связанных с этим (включая этот проницательный: В чем разница между деструктором "= 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, так что я знаю, что они оба нетривиальны.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...