【发布时间】:2018-04-05 17:40:28
【问题描述】:
根据CppCoreGuideline,我应该禁用基类的复制构造函数并提出克隆方法:https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rc-copy-virtual
例如:
class B {
public:
explicit B() = default;
B(B&&) = default; // Move constructor
B& operator=(B&&) = default; // Move assignment operator
B(const B&) = delete; // Copy constructor
B& operator=(const B&) = delete; // Copy assignment
virtual ~B() = default;
virtual unique_ptr<B> clone()
{
return unique_ptr<B>{new B{*this}}; // how do this without copy constructor ?
}
private:
int c;
int d;
};
class D : public B {
public:
explicit D() = default;
D(D&&) = default; // Move constructor
D& operator=(D&&) = default; // Move assignment operator
D(const B&) = delete; // Copy constructor
D& operator=(const D&) = delete; // Copy assignment
virtual ~D() = default;
virtual unique_ptr<B> clone() override
{
// how can I copy all private data member of base class ???
}
};
但是如何在克隆方法中复制所有私有数据成员?显然我会使用 CRTP 模式:C++: Deep copying a Base class pointer
【问题讨论】:
-
而不是将base的虚拟
clone函数声明为pure,也许实现它并且在派生类中覆盖它时,另外调用基本版本? -
移动构造函数还是方法?
-
@Charles 链接什么代码? OP链接指南并跳转到特定部分,其中不仅包含代码,还包含解释和信息。 OP 应该/可以复制和强调特定部分的事实可能值得商榷。不理解downvote,除非有重复
-
@Fureeish 哎呀。看到一个github链接。
-
我编辑了我的问题。感谢您的关注。