Предположим, у меня есть класс, как следующее:глубокая копия и динамическое приведение unique_ptr
class A { virtual ~A(); ... }
class B : public A { ... }
class C : public A { ... }
У меня также есть вектор unique_ptr который объявлен следующим образом:
std::vector<std::unique_ptr<A>> vec;
Предположим, VEC заполняемый с unique_ptr к объектам производного класса. Что делать, если я хочу получить глубокую копию любого из векторных элементов, либо b, либо c, и указать на него базовый класс unique_ptr? Первоначально я делал такие вещи, как
std::unique_ptr<A> tmp = std::make_unique<A>(*b);
Я не думаю, что это правильно. Может кто-то помочь мне с этим?
Это действительно не имеет никакого отношения к 'unique_ptr'. 'A * tmp = new A (* b);' будет более правильным. –
@Nicol Bolas Я хочу использовать unique_ptr, поскольку я не хочу напрямую использовать исходные указатели. – ascetic652
Да, я понимаю. Но причина, по которой вы опубликовали неправильный, не имеет ничего общего с тем фактом, что вы используете 'unique_ptr'. Это не проблема с 'unique_ptr' или' make_unique' или что-то в этом роде. –