首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QObject克隆

QObject克隆
EN

Stack Overflow用户
提问于 2010-05-18 16:11:50
回答 2查看 11.9K关注 0票数 7

我知道Qobject应该是标识而不是值,比如你不能复制它们,默认情况下,复制构造函数和赋值都是禁用的,正如qt文档中所解释的那样。但是,是否可以使用克隆方法从现有的QObject创建新的an呢?这会是一个逻辑错误吗?如果我说

代码语言:javascript
复制
QObject b; 
QObject a; 
b.cloneFrom(a);

代码语言:javascript
复制
QObject a = new QOBject();
QObject b = new QOBject();
b->cloneFrom(a);

而clone方法会复制像成员之类的东西,这是不是错了?

如果这样可以,我可以编写自己的复制构造函数和赋值运算符吗?

注意:我实际上想用继承qobject的类来尝试这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-18 17:47:30

在我看来,克隆QObjects几乎总是在语义上被打破,并导致不想要的副作用,因为正如你已经说过的那样,它们有一个“身份”。因此,克隆打破了人们对QObjects的所有假设,比如它们的信号/插槽连接和动态属性。你应该考虑要克隆的对象是否真的需要QObjects,或者你想要克隆的“值部分”是否可以被分离出来。

而且,克隆只对QObjects的特定子类有意义,而对QObjects本身没有意义(它们没有真正的“类似值”属性)。

同样,A;B;A.cloneFrom( B)看起来是坏的,因为如果B是B的子类的实例而不是B本身,它就不起作用。克隆应该通过一个虚拟的B* B:: Clone ()常量来完成。

票数 8
EN

Stack Overflow用户

发布于 2010-05-18 17:46:43

我认为在这种情况下,最好的做法是使用您想要在QObjects之间复制的数据创建类。此类不应从QObject或任何从QObject派生的类派生。这个类将是“值容器”。在这种情况下,您应该能够以非常好的方式解决您的问题。

另一个提示:对于这个类,您可以使用隐式数据共享和写入时复制来减少不必要复制的开销:http://doc.qt.io/qt-5/implicit-sharing.html

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2855495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档