是隐性共享'从Qt课程中可以遗传?

时间:2014-09-15 17:21:45

标签: c++ qt copy-on-write qshareddata

如果我创建一个隐式共享Qt类的子类(例如,QList),我的子类也会被隐式共享吗?

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

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

1 个答案:

答案 0 :(得分:1)

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

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

回答你的问题:

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

您执行隐式共享的优势,您必须再次为自己的数据明确设置。
您需要将数据封装在共享数据容器中,并管理方法中的detach。检查文档:
http://doc.qt.io/qt-5/qshareddatapointer.html#details