如何使用std::unique_ptr与多态性习惯用法?例如:
class Abstract {
virtual void foo() = 0;
}
class Child1 final : public Abstract {
void foo() override;
}
class Child2 final : public Abstract {
void foo() override;
}
void bar(const Abstract& a) {
std::unique_ptr<Abstract> ptr = std::make_unique<Abstract>(a); // exception :(
}
int main() {
Child1 c1;
Child2 c2;
bar(c1);
bar(c2);
}
如何从Abstract的任何子对象初始化unique_ptr?
2条答案
按热度按时间d8tt03nd1#
当示例化一个对象时,程序需要知 prop 体的类,否则它不能为它分配适当的内存。
std::make_unqie
创建一个全新的对象,而不仅仅是一个指针,你不能在这里创建一个抽象类的对象(Abstract
):你缺少的是你可以把基类的指针赋值给派生类的指针:
xt0899hw2#
您可以使用clone习惯用法,它允许多态克隆(或 copy)。