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