Код: Выделить всё
#include
#include
class A {
public:
virtual std::unique_ptr clone() = 0;
};
class B : public A {
private:
int b0;
public:
B(const B& b) { b0 = b.get_b0(); }
B(const int& b0) : b0(b0) {}
std:: unique_ptr clone() { return std::make_unique(*this); }
const int& get_b0() const { return b0; }
int& get_b0() { return b0; }
};
class box {
private:
std::unique_ptr o;
public:
box(const box& sp) { o = sp.o->clone(); }
box(std::unique_ptr o) : o(std::move(o)) {}
std::unique_ptr get_o() { return o->clone(); }
};
void foo(std::unique_ptr sp) {
std::unique_ptr o = sp->get_o();
if(const B *ptr1 = dynamic_cast(o.get()))
std::cout get_b0() get_o().get()))
std::cout get_b0()
Подробнее здесь: [url]https://stackoverflow.com/questions/79008551/problem-with-stdunique-ptr-and-dangling-pointer[/url]