c – “隐式共享”是否可以从Qt类中删除?

c – “隐式共享”是否可以从Qt类中删除?,第1张

概述如果我创建一个隐式共享Qt类的子类(例如,QList),我的子类也会被隐式共享吗? 我阅读了QtCore5.3文档中的brief introduction to implicit sharing,但我没有看到任何遗传性. 我的目的是在决定传递哪些参数以及如何传递它们时尝试编写更有效的代码. 正如评论中所述,使用隐式共享的Qt类通常是数据容器或工具,并不打算进行子类化. 您可以注意到,因为没有虚拟析 如果我创建一个隐式共享Qt类的子类(例如,QList),我的子类也会被隐式共享吗?

我阅读了QtCore5.3文档中的brief introduction to implicit sharing,但我没有看到任何遗传性.

我的目的是在决定传递哪些参数以及如何传递它们时尝试编写更有效的代码.

解决方法 正如评论中所述,使用隐式共享的Qt类通常是数据容器或工具,并不打算进行子类化.
您可以注意到,因为没有虚拟析构函数,实际上根本没有虚函数.

由于存在风险和不良做法,您可能希望在没有继承的情况下进行不同的设计.

回答你的问题:

隐式共享如何工作?
类实例共享数据,并通过调用detach()函数明确告知何时需要修改此数据(从而深度复制它).
因此,母类数据仍然是共享数据指针,并且母类方法仍然会在适当的时候分离.但是您的子类数据成员不会被隐式共享,并且您的子类方法在可能需要时不会隐式分离.
您也可能会重载方法而忘记分离,从而弄乱了共享数据.

您不会受益于隐式共享,您必须为您自己的数据再次显式设置它.
您需要将数据封装在共享数据容器中,并管理方法中的分离.检查文档:
http://doc.qt.io/qt-5/qshareddatapointer.html#details

总结

以上是内存溢出为你收集整理的c – “隐式共享”是否可以从Qt类中删除?全部内容,希望文章能够帮你解决c – “隐式共享”是否可以从Qt类中删除?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1227396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存