struct Base {
Base() {
std::cout << "Inside: " << __PRETTY_FUNCTION__ << std::endl;
}
~Base() {
std::cout << "Inside: " << __PRETTY_FUNCTION__ << std::endl;
}
};
struct BaseWrapper {
const Base &b;
};
int main()
{
{
auto *w = new BaseWrapper{{}};
std::cout << "Inside: " << __PRETTY_FUNCTION__ << std::endl;
delete w;
}
return 0;
}
Приведенный выше код работает, как я и ожидал, когда я компилирую его с C ++ 11 или C ++ 14, но когда я компилирую его с C ++ 17, он дает мне что-то вроде этого:
Inside: Base::Base()
Inside: int main()
Как видите, Base :: ~ Base () никогда не вызывался.Что не имеет большого смысла для меня.Я тестировал этот код с GCC 7.3.0 на Ubuntu 18.04.1 LTS, а также с OnlineGDB .Все они дают одинаковый результат.
Мне просто интересно, если это новая функция в C ++ 17 или это ошибка?
Обновление: IЯ хорошо знаю, что w->b
- это свисающая ссылка.На самом деле, я специально написал этот кусок кода, чтобы показать это.Затем я обнаружил эту проблему во время тестирования.
Что я действительно хочу знать, так это то, насколько серьезна эта проблема, если мне нужно придерживаться GCC 7.3?или есть ли другие способы воспроизвести ту же проблему?или отчет о дефекте?