问题标签 [virtual-copy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++类继承问题
嗨,我有两个类,一个叫做指令,一个叫做 LDI,它继承自指令类。
然后我创建了一个指令类型的指针并尝试指向一个新的 LDI 类型的实例。
我收到以下编译器错误。任何想法我做错了什么?
c++ - C++ 虚拟构造函数,没有 clone()
我想对指向多态类的指针的 STL 容器执行“深拷贝” 。
我知道原型设计模式,它是通过Virtual Ctor Idiom实现的,如C++ FAQ Lite, Item 20.8中所述。
它简单明了:
那么深拷贝是:
缺点
正如 Andrei Alexandrescu所说:
clone()
实现必须在所有派生类中遵循相同的模式;尽管其结构重复,但没有合理的方法来自动定义clone()
成员函数(即除了宏之外)。
此外,客户ABC
可能会做坏事。(我的意思是,没有什么能阻止客户做坏事,所以它会发生。)
更好的设计?
我的问题是:是否有另一种方法可以使抽象基类可克隆,而无需派生类编写与克隆相关的代码?(助手类?模板?)
以下是我的背景。希望这将有助于理解我的问题。
我正在设计一个类层次结构来对一个类执行操作Image
:
图像操作是用户定义的:类层次结构的客户端将实现他们自己的类派生自ImgOp
:
可以对图像按顺序执行多个操作:
如果有多个图像,则可以将集合拆分并在多个线程上共享。为确保“线程安全”,每个线程必须拥有自己的所有操作对象的副本v
--v
成为要在每个线程中深度复制的原型。
编辑:线程安全版本使用原型设计模式来强制复制指向对象——而不是 ptrs:
当图像操作类很小时,这很有意义:不要序列化对ImgOp
s 的唯一实例的访问,而是为每个线程提供自己的副本。
困难的部分是避免新ImgOp
派生类的编写者编写任何与克隆相关的代码。(因为这是实现细节——这就是为什么我用奇怪的重复模式驳回了保罗的答案。)