Здравствуйте, Bill Baklushi, Вы писали:
BB>Хочется инициализировать массив одним initializer_list, но рекурсивным. Например BB>Что-то можно сделать или в морг?
Ну вот такой эскиз подхода, возможно, окажется полезным:
Если уж придирки продолжились и с учётом того, что скорее всего Tree будет использоваться только при инициализации (как тип аргумента функции инициализации), то можно уменьшить потребление памяти и количество алокаций:
ArtDenis:
AD>с учётом того, что скорее всего Tree будет использоваться только при инициализации (как тип аргумента функции инициализации), то можно уменьшить потребление памяти и количество релокаций:
Здравствуйте, ArtDenis, Вы писали:
AD>Если уж придирки продолжились и с учётом того, что скорее всего Tree будет использоваться только при инициализации (как тип аргумента функции инициализации), то можно уменьшить потребление памяти и количество алокаций:
AD>
Если так, то не очень понятно, для чего здесь нужен std::vector. Можно ведь полностью перейти на std::initializer_list. Ну и параметризация initializer_list двумя разными типами, с моей точки зрения выглядит как не очень оправданное усложнение кода. Ведь initializer_list — это всего лишь пара указателей для которых не нужно никаких аллокаций и копирования контента они за собой не влекут. Я бы переписал так:
И я даже пошел бы дальше, не постеснявшись использовать наследование. Имхо, в данном случае наследование вполне естественно и дает сразу готовый к использованию класс:
Здравствуйте, Bill Baklushi, Вы писали:
BB>UPD. А почему не оба варианта initializer_list?
Тогда был не уверен, но сейчас подумал и решил что можно. Никаких UB из-за использования объектов после вызова деструктора быть не должно, так что всё ок.
ArtDenis:
BB>>UPD. А почему не оба варианта initializer_list? AD>Тогда был не уверен, но сейчас подумал и решил что можно. Никаких UB из-за использования объектов после вызова деструктора быть не должно, так что всё ок.
О каком "использовании объектов после вызова деструктора" идёт речь?
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
Здравствуйте, Bill Baklushi, Вы писали:
BB>О каком "использовании объектов после вызова деструктора" идёт речь?
Речь о самом частом UB при использовании initializer_list, когда initializer_list разрушен, но идёт обращение к объектам, которые в нём хранились. В данном случае все initializer_list (при использовании для передачи в функцию инициализации) будут живыми при доступе из функции инициализации, так что всё нормально
ArtDenis:
AD>В данном случае все initializer_list (при использовании для передачи в функцию инициализации) будут живыми при доступе из функции инициализации, так что всё нормально
Ну да, мы же договорились, что Tree используется только при инициализации основного объекта...
Модератор-националист Kerk преследует оппонентов по политическим мотивам.