-1

我需要用 C++ 编写一种 shared_ptr<> 。但是,我现在正在努力解决一个奇怪的错误。
以下代码:

template <typename T> class shared_ptr;
typedef std::map<void*, shared_ptr<void*>> ptr_t;
ptr_t ptr_set;
template <typename T> class shared_ptr
{
    T* ptr;
public:
    bool in_use;
    shared_ptr<T>()
    {
        ptr = new T;
        in_use = false;
        ptr_set.insert(ptr_t::value_type(ptr, *this)); // the error is here
    }
    T operator*()
    {
        return *ptr;
    }
    shared_ptr<T>(shared_ptr<T>& ref)
    {
        this->in_use = false;
        this->ptr = ref.ptr;
        T* p = this->ptr;
        ptr_set.insert(ptr_t::value_type(p, *this));
    }
};

拒绝编译说“std::pair<_Ty1,_Ty2>::pair: 2 个重载都不能转换所有参数类型”(实际上是第 13 行中的 C2665)。
顺便说一句, shared_ptr 在 main() as 中被实例化shared_ptr<array_t> a,其中array_t是一个仅由一个简单数组组成的结构(我认为这不是错误的实际来源)。有任何想法吗?
提前致谢。

PS 答案已被编辑以修复错字(p 而不是 ptr 在第 13 行)。

4

2 回答 2

2

当然,你会得到一个错误,因为shared_ptr< T* >不能强制转换为shared_ptr< void* >except Tis void。要解决它,您可以向您的shared_ptr类添加一个强制转换运算符,它将任何类型转换为shared_ptr< void* >

于 2013-05-13T06:24:00.203 回答
0

有错误的行是指p未声明的行。你的意思是说ptr

于 2013-05-13T06:17:54.350 回答