【发布时间】:2015-11-10 00:35:09
【问题描述】:
我有一个简单的基类和两个继承自它的类。问题是没有使用每个子类中的移动赋值运算符。这基本上是我所拥有的:
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
知道我做错了什么吗?
【问题讨论】:
-
你想把双层巴士变成巴士
-
Parent &p {};不应编译,您不能将临时分配给左值引用