如何定义一个函数,该函数将任何类型的指针值作为参数?

时间:2014-10-08 22:31:24

标签: c++ pointers assignment-operator

我正在实践智能指针类。

我已经定义了一个赋值运算符重载,它接受同一个类的另一个实例。现在我想定义一个带有任何指针的运算符的重载。所以我应该能够做smartPointer = &someObject;smartPointer = NULL;之类的事情。

我该怎么做呢?我应该传递void*吗?还有别的吗?

作为一个更普遍的问题(我知道这很少需要):什么样的参数告诉编译器可以传入任何指针?

2 个答案:

答案 0 :(得分:1)

您可以使用模板函数使对象允许指定任何指针。

template<typename T>
void operator=(T* obj)
{
    //Your code here
}

但是,它不是一个智能指针,如果你可以为它分配任何原始指针,因为它可以分配给多个智能指针对象,然后在删除指针时会出现问题。

答案 1 :(得分:1)

以下可能会有所帮助:

class MySharedPointer
{
public:

    template <typename T>
    MySharedPointer& operator = (T* p)
    {
        ptr.reset(p, [](void* p) { delete static_cast<T*>(p); });
        return *this;
    }

    // nullptr is not a pointer, so it should have its own overload.
    MySharedPointer& operator = (std::nullptr_t) {
        ptr.reset();
        return *this;
    }

private:
    std::shared_ptr<void> ptr;
};

Live example