【发布时间】:2016-04-26 12:40:25
【问题描述】:
我需要使用QSharedPointer 来进行引用计数,但我将在单线程应用程序中使用它,因此我不想要线程安全开销(我认为这是相当昂贵的)。
有没有办法关闭线程安全,或者是否有一个仅提供引用计数的等效 Qt 类?如果没有,是否有不需要我包含诸如 boost 之类的大库或打开 c++11 的独立类?
【问题讨论】:
-
@NathanOliver 不幸的是,不是。来自文档:“QSharedDataPointer 实现线程安全引用计数”
-
我认为您将无法摆脱这一点。甚至 boost 和 C++11 也能做到这一点。至少对底层指针的访问不是线程安全的,因此可以处理大部分开销。
-
没那么贵。就系统操作和/或 CPU 命令而言,它们所花费的时间比不这样做要长得多……但与应用程序的其他活动相比,它通常很少会出现在配置文件中,因为它在任何情况下都具有重要意义无论如何。
-
我想补充一点,它不仅便宜,而且便宜,因为它不做任何锁定。它只是关于非常快的原子增量/减量指令。当然,比非原子慢,但不是那么多。它使用互斥锁,那么它可能会很昂贵,但事实并非如此。如果你有一些非常复杂的算法经常使用这个指针,你总是可以查询内部指针,将它保存在一个局部变量中,然后在你疯狂的嵌套循环中使用它。
标签: c++ qt qsharedpointer