Size: a a a

2020 March 17

V

Vyacheslav in pro.cxx
Alex
Какой-то из динамических контейнеров позволяет объявить себя с неполным типом элемента?
map, list, forward_list

Только с ними работать нельзя почти.
источник

V

Vyacheslav in pro.cxx
Ещё потенциально unordered_map, (unordered_)set
источник

V

Vyacheslav in pro.cxx
Насчёт очередей надо уточнять: давно с ними не работал.

Про тривиальность деструктора хранимого типа нужно уточнить (в точке вызова деструктора контейнера деструктор хранимого типа должен быть известен).
источник

V

Vyacheslav in pro.cxx
Ситуация аналогичная как с unique_ptr<T>, где T - неполный: объявить можно, с линковкой удаления проблемы.
источник

S

Stas in pro.cxx
Ilia Zviagin
Никакой.
А почему тогда gcc собирает код?(выше ссылка на godbolt)
источник

A

Alex in pro.cxx
Vyacheslav
Насчёт очередей надо уточнять: давно с ними не работал.

Про тривиальность деструктора хранимого типа нужно уточнить (в точке вызова деструктора контейнера деструктор хранимого типа должен быть известен).
Очередь - это ж просто адаптер
источник

A

Alex in pro.cxx
Vyacheslav
Ситуация аналогичная как с unique_ptr<T>, где T - неполный: объявить можно, с линковкой удаления проблемы.
У меня почему-то прокатило объявить вектор неполного типа внутри класса с дефолтным деструктором
источник

A

Alex in pro.cxx
если б это был unique_ptr, пришлось бы явно определять деструктор в .срр
источник

IZ

Ilia Zviagin in pro.cxx
Stas
А почему тогда gcc собирает код?(выше ссылка на godbolt)
Потому что ты не врубаешься какой тип у элемента контейнера
источник

IZ

Ilia Zviagin in pro.cxx
Alex
У меня почему-то прокатило объявить вектор неполного типа внутри класса с дефолтным деструктором
Врешь
источник

A

Alex in pro.cxx
не-а
источник

IZ

Ilia Zviagin in pro.cxx
Alex
не-а
Я те говорю...
источник

A

Alex in pro.cxx
ну не объявлен вообще деструктор в этом классе
источник

IZ

Ilia Zviagin in pro.cxx
Alex
У меня почему-то прокатило объявить вектор неполного типа внутри класса с дефолтным деструктором
Покажи объявление.
источник

IZ

Ilia Zviagin in pro.cxx
Alex
ну не объявлен вообще деструктор в этом классе
Деструктор тут ни при чем
источник

A

Alex in pro.cxx
то есть, просто с неполным классом нельзя объявить вектор? Так вон же на годболт компилится
источник

АК

Александр Караев in pro.cxx
Alex
то есть, просто с неполным классом нельзя объявить вектор? Так вон же на годболт компилится
Можно, главное, чтобы во всех местах, где требуется определение класса, оно было доступно (работа с контейнером, деструктор)
источник

A

Alex in pro.cxx
Вот с деструктором непонятно, почему дефолтный прокатил. Потому что родительский объект разрушается только из .срр, где уже доступно полное объявление value_type?
источник

АК

Александр Караев in pro.cxx
Alex
Вот с деструктором непонятно, почему дефолтный прокатил. Потому что родительский объект разрушается только из .срр, где уже доступно полное объявление value_type?
Если деструктор не писать, он по умолчанию inline ~T() = default;
Соответственно, его тело нужно в месте использования и там же оно и будет инстанцировано (как-то так)
источник

A

Alex in pro.cxx
ну то есть прокатило потому, что место использования - это .срр, где все типы complete
источник