shared_ptr をゼロから実装してどのように機能するかを学ぼうとしていますが、T の基底クラスを検出する方法がわかりません。
is_base_of() を使用してみましたが、const 値が得られ、if ステートメントで使用してオブジェクトの内部の weak_ptr を設定することはできません。
私はこれらの線に沿って考えていました:
template <class T>
class shared_ptr
{
shared_ptr(T* ptr)
{
...
}
shared_ptr(enable_shared_from_this<T>* ptr)
{
...
Ptr->m_this = weak_ptr<T>(this);
}
};
しかし、これまでのところ運がありません。Boost と VC++ の実装は私にはわかりにくいので、簡単な説明を探しています。
ここでそれは言います
std::shared_ptr のコンストラクターは enable_shared_from_this ベースの存在を検出し、新しく作成された std::shared_ptr を内部に格納された弱参照に割り当てます。
ええ、どうやって?