первый уб
конструктор не вызовется
а то, что ты можешь так же написать *reinterpret_cast<const std::shared_ptr<T>*>(0x0000752343abd4df);
Но я же написал не так, а *reinterpret_cast<const std::shared_ptr<T>*>(&ptr);
ну вот результат будет +- тот же
реинтерпрет не начинает лайфтайм объекта, трогаешь объекты без лайфтайма = тебя бьют коллеги за гаражами после работы
А если это референс - ему всё равно нужен лайфтайм?
ты реинтерпрет кастом хочешь в референс закастить?
Разыменовать указатель и сразу отправить его в функцию которая принимает референс
ничего не понял, но взламывать систему типов с помощью незаконных кастов нельзя
Эээ разве нельзя без этого
struct Foo { virtual ~Foo() = default; }; struct Bar : public Foo { virtual ~Bar() = default; };> struct Baz : public Foo { virtual ~Baz() = default; };> void create(std::shared_ptr<Bar>& dest) { dest = std::make_shared<Bar>(); } void create(std::shared_ptr<Baz>& dest) { dest = std::make_shared<Baz>(); } void createAny(std::shared_ptr<Foo>& dest) { if (std::dynamic_pointer_cast<Bar>(dest)) { create(*reinterpret_cast<const std::shared_ptr<Bar>*>(&ptr)); } else if (std::dynamic_pointer_cast<Baz>(dest)) { create(*reinterpret_cast<const std::shared_ptr<Baz>*>(&ptr)); } } std::shared_ptr<Bar> bar; std::shared_ptr<Baz> baz; createAny(bar); createAny(baz);
А зачем ты сделал динамик каст, задискардил возвращаемое здачение, и потом закастил через уб?
Потому что динамик каст вернёт новый объект, и если мы передатим его в функцию create то первый объект не изменится, но вопрос уже в другом, пойду думать
+, непонятно, зачем игнорить то, что вернет dynamic_cast
так тебе шаред новый вернет, а внутри тот же объект будет не?
а, ну ему надо чтобы поинтер был аут параметром
а почему не шаблон просто?
А за такое я бы вообще забанил..
Обсуждают сегодня