我制作了一个基于长期抽象的 Qt 库QSharedDataPointer
,例如和QSharedData
. 因此,当我需要一个普通的共享指针时,QSharedPointer
为了保持一致性,使用它是有意义的。
我现在在 C++11 项目中使用它。为了使代码更标准,我将切换到shared_ptr
它的所有本地子系统。
库本身中的 C++11 依赖项不一定是可取的,因此感觉您应该能够选择要使用的共享指针类型。作为向前迈进的第一步,我尝试了 C++0x 中模板别名的灵活性中建议的这种方法(诚然是 C++11 依赖项本身,但我可以通过非 C++11 中的编译器标志使用预处理器构建)
#if THINKERQT_USE_STD_SHARED_PTR
#include <memory>
template<class T>
using shared_ptr_type = std::shared_ptr<T>;
#else
#include <QSharedPointer>
template<class T>
using shared_ptr_type = QSharedPtr<T>;
#endif
不幸的是,指针类为方法选择了不同的名称。值得注意的是,访问包含的指针是由.get()
shared_ptr 和.data()
QSharedPointer 完成的。
我打算做一个提取器,某种shared_ptr_type_get<>
但后来注意到一个可以有效地实现同样的事情(在包含的指针不为空的情况下,我可以通过布尔强制测试空):
&(*ptr)
如果您正在阅读代码,这是一个有点减速带的东西,并且有人可能会尝试优化(然后很快就会发现这是行不通的)。但除了WTF因素之外,它似乎无害……是吗?