や などの長年の抽象化に基づいて構築された 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<>
たが、同じことを効果的に達成できることに気付きました (含まれているポインタが null ではなく、ブール型強制によって null をテストできる場合)。
&(*ptr)
コードを読んでいると、ちょっとしたスピード バンプになります。しかし、WTF 要因を除けば、それは十分に害がないように思えます...そうですか?