Olo*_*rin 5 c++ qt copy-constructor qobject
我知道Qobjects应该是身份而不是值,例如你不能复制它们,默认情况下,复制构造函数和赋值被禁用,如qt文档中所述.但是可以使用克隆方法从现有的QObject创建新的QObject吗?这会是一个逻辑错误吗?如果我说
QObject b;
QObject a;
b.cloneFrom(a);
Run Code Online (Sandbox Code Playgroud)
要么
QObject a = new QOBject();
QObject b = new QOBject();
b->cloneFrom(a);
Run Code Online (Sandbox Code Playgroud)
和克隆方法复制像成员等东西这会是错的吗?
如果这样可以,我可以编写自己的复制构造函数和赋值运算符吗?
注意:我实际上想用继承qobject的类来尝试这个.
在我看来,克隆QObjects几乎总是在语义上被打破并导致不必要的副作用,因为它们具有你已经说过的"身份".因此,克隆打破了关于QObjects的所有假设,例如它们的信号/槽连接和动态属性.你应该考虑克隆的对象是否真的需要是QObjects,或者你想要克隆的"value-part"是否可以被考虑在内.
如果有的话,克隆只对QObjects的特定子类有意义,而不是QObjects本身(它没有真正的"类似值"属性).
亦是; B; A.cloneFrom(B)看起来很糟糕,因为如果B是B的子类而不是B本身的实例,它就不起作用.克隆应该通过我所说的虚拟B*B :: clone()const来完成.
我认为在这种情况下的最佳实践是使用要在QObjects之间复制的数据创建类。此类不应衍生自QObject或任何衍生自QObject的类。此类将是“值容器”。在这种情况下,您应该能够以非常好的方式解决您的问题。
另一个提示:对于此类,您可以使用隐式数据共享和写入时复制,以减少不必要的复制的开销:http : //doc.qt.io/qt-5/implicit-sharing.html