gpt4 book ai didi

c++ - 未调用/继承子类中的移动赋值运算符

转载 作者:行者123 更新时间:2023-11-30 00:47:48 25 4
gpt4 key购买 nike

我有一个简单的基类和两个从它继承的类。问题是没有使用每个子类中的移动赋值运算符。这基本上是我所拥有的:

class Parent {
public:
virtual ~Parent();
virtual Parent& operator=(Parent &&parent);
};

class Child1 : public Parent {
public:
~Child1();
Child1& operator=(Child1 &&child);
};

class Child2 : public Parent {
public:
~Child2();
Child2& operator=(Child2 &&child);
};

实现中到处都是日志,所以我知道调用了什么以及调用的时间。然后,我运行这个(伪)代码:

Parent &p {};
if (x == 1)
p = Child1 {};
else
p = Child2 {};

我得到的输出看起来像这样:

: Child constructor
: Parent move operator
: Child destruct
: SIGSEGV

知道我做错了什么吗?

最佳答案

这是slicing的经典案例您在其中将派生类型的实例分配给基类型的实例。要解决此问题,您必须使用动态分配和指针:

std::unique_ptr<Parent> p;

if(x == 1)
p = std::make_unique<Child1>();
else
p = std::make_unique<Child2>();

关于c++ - 未调用/继承子类中的移动赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33620936/

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