【发布时间】:2021-09-15 11:34:47
【问题描述】:
我一直试图在不复制对象的情况下将对象转发给父级。我似乎无法做到这一点,也不知道为什么。
这是我想做的事情的一个例子。但是,它无法编译。
class Initialisee {
public:
Initialisee() = default;
Initialisee(const Initialisee&) = delete;
Initialisee(Initialisee&&) = default;
};
class Parent {
public:
Parent(const Initialisee i) { }
};
class Child: public Parent {
public:
Child(const Initialisee i): Parent(std::move(i)) { }
};
这不会编译,因为尽管有std::move(),孩子仍在尝试复制构造对象以将其传递给父构造函数。我正在使用启用了最新语言功能的 MSVC 2019 (16.10.3)。
为什么不让我这样做?这是语言中的错误还是怪癖?我怎样才能以正确的方式编写它而不必在对象上实现复制构造函数(这对于我真正想要这样做的情况来说非常昂贵)?
【问题讨论】:
标签: c++ inheritance constructor c++20 perfect-forwarding