【发布时间】:2017-07-29 04:56:35
【问题描述】:
我有以下设置:
class MyClass {
public:
static MyClass Clone(const MyClass& other) {
return MyClass(other, 10);
}
static MyClass CreateNormal(int x, int y) {
return MyClass(int x, int y);
}
// There are a few more factory functions.
private:
// Constructor 1
MyClass(int x, int y) : b_(x, y) {}
// Constructor 2
MyClass(const MyClass& other, int c) : b_(other.b_, c) {}
// And a lot more constructors.
// NotMyClass has its copy constructor deleted.
NotMyClass b_;
}
int main() {
MyClass A(1,2);
MyClass B = MyClass::Clone(A); // ERROR
}
有没有办法在不修改NotMyClass 的情况下解决这个问题?
发生错误是因为 MyClass 的复制构造函数被隐式删除。有没有办法可以使用 std::Move() 来解决这个问题?
我不能删除工厂函数,因为实际的类有很多构造函数,需要工厂函数来清晰和理解。
【问题讨论】:
-
您可以使用哪种 c++ 标准?
-
NotMyClass 有移动构造函数吗?
-
如果你想克隆一个不可复制的对象那么你最好希望
NotMyClass本身有一个clone()方法。否则你试图打破它的设计。您确定要复制这个不可复制的东西吗?你不想引用它吗? -
如果
NotMyClass不提供复制构造函数,那几乎肯定是有原因的。我认为它是库的一部分,因此请阅读有关它的文档,了解为什么它不能被复制以及您有哪些替代方案。如果它是不应该被复制的东西,那么您可能只需要创建一个然后有一个NotMyClass*或NotMyClass&。否则,它们可能会提供工厂函数,您可以在复制构造函数的初始化列表中调用它们。 -
是的。 NotMyClass 没有复制构造函数。但它确实提供了重复的功能。能够为使用重复功能的 MyClass 创建我自己的 CopyConstructor。谢谢!
标签: c++ std copy-constructor factory-pattern move-constructor