gpt4 book ai didi

c++ - QObject克隆

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:14 26 4
gpt4 key购买 nike

我知道 Qobjects 应该是身份而不是值,例如你不能复制它们,默认情况下,复制构造函数和赋值被禁用,如 qt 文档中所述。但是是否可以使用克隆方法从现有的 QObject 创建新的 QObject?这会是逻辑错误吗?如果我说

QObject b; 
QObject a;
b.cloneFrom(a);

QObject a = new QOBject();
QObject b = new QOBject();
b->cloneFrom(a);

克隆方法会复制成员等内容,这是错误的吗?

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

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

最佳答案

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

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

还有,A; B; A.cloneFrom( B ) 看起来有问题,因为如果 B 是 B 的子类实例而不是 B 本身,它就不起作用。克隆应该通过虚拟 B* B::clone() const 来完成,我会说。

关于c++ - QObject克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2855495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com