我实现保存一个指针类型名Ť 我想实现一个拷贝构造(与碱类(T)的一个指针)一个shared_pointer模板,其接收共享指针类(包含指向派生类(O)的指针)。 我如何将接收到的指针从Base类型转换为shared_ptr?铸造
template <typename T>
class Shared_Ptr
{
public:
template <typename O>friend class Shared_Ptr;
template <typename O>
Shared_Ptr(const Shared_Ptr<O>& other_);
private:
struct PtrVal
{
PtrVal(T* ptr);
~PtrVal();
T *m_ptr;
size_t m_count;
};
PtrVal *m_val;
};
我该如何实现Copy-Constructor?
template <typename T>
template <typename O>
Shared_Ptr<T>::Shared_Ptr(const Shared_Ptr<O>& other_):
m_val(static_cast<const Shared_Ptr<T> >(other_).m_val)
{}
这编译但在运行时给出分段错误(核心转储)。
我找到了另一种解决方案,但它实在是太丑: 我转换m_ptr的other_到T *(代替邻*),然后施放的O m_val到m_val牛逼
的Shared_Ptr<T>::Shared_Ptr(const Shared_Ptr<O>& other_)
{
if(dynamic_cast<T *>(other_.m_val->m_ptr))
{}
m_val = (Shared_Ptr<T>::PtrVal *)other_.m_val;
}
任何建议更好的东西? 谢谢
在升压:: shared_ptr的和std :: shared_ptr的源代码看看。您会看到删除程序也存储在控制块中(这对于删除类型很重要)。 –
你应该用术语更准确,你所说的copy ctor不是一个。 – Slava