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

How can I define a function that takes as a parameter a pointer value of any kind?

本文关键字:类型 任何 指针 参数 函数 定义 何定义 一个      更新时间:2023-10-16

我正在实现一个智能指针类来练习。

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

我该怎么做?我应该通过void*吗?还有别的吗?

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

您可以使用模板函数使您的对象允许将任何指针分配给它。

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

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

以下可能会有所帮助:

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;
};

实例