gpt4 book ai didi

c++ - 深拷贝和动态转换 unique_ptr

转载 作者:行者123 更新时间:2023-11-27 23:59:59 26 4
gpt4 key购买 nike

假设我有一个像下面这样的类:

class A { virtual ~A(); ... }
class B : public A { ... }
class C : public A { ... }

我还有一个 unique_ptr vector ,它是这样声明的:

std::vector<std::unique_ptr<A>> vec;

假设 vec 由派生类对象的 unique_ptr 填充。如果我想要任何 vector 元素的深拷贝,b 或 c,并让一个基类 unique_ptr 指向它,我该怎么办?本来我在做类似的事情

std::unique_ptr<A> tmp = std::make_unique<A>(*b);

我不认为这是正确的。

最佳答案

一个可能的解决方案是在基类中声明一个虚拟克隆方法并为每个子类覆盖它:

class A {
virtual ~A() {}
virtual std::unique_ptr<A> clone() const = 0;
}
class B : public A {
std::unique_ptr<A> clone() const override {
return std::unique_ptr<A>(new B(*this));
}
};

编辑:

用法示例:

void f(const A& original) {
std::unique_ptr<A> copy = original.clone();
// Here, copy points to an instance of class B.
}

关于c++ - 深拷贝和动态转换 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39905802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com