C++ 如何定义一个以任何类型的指针值作为参数的函数?

C++ 如何定义一个以任何类型的指针值作为参数的函数?,c++,pointers,assignment-operator,C++,Pointers,Assignment Operator,我正在实践一个智能指针类 我已经定义了一个赋值运算符重载,它接受同一类的另一个实例。现在我想定义这个操作符的重载,它接受任何指针。所以我应该能够做类似smartPointer=&someObject或smartPointer=NULL,等等 我该怎么做呢?我是否应该传入一个void*?还有别的吗 作为一个更一般的问题(我知道这是很少需要的):什么样的参数告诉编译器可以传入任何指针?您可以使用模板函数使您的对象允许向其分配任何指针 template<typename T> void o

我正在实践一个智能指针类

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

我该怎么做呢?我是否应该传入一个
void*
?还有别的吗


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

您可以使用模板函数使您的对象允许向其分配任何指针

template<typename T>
void operator=(T* obj)
{
    //Your code here
}
模板
void运算符=(T*obj)
{
//你的代码在这里
}
但是,如果您可以为其分配任何原始指针,则它不是智能指针,因为它可以分配给多个智能指针对象,因此删除指针时会出现问题。

以下内容可能会有所帮助:

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;
};
类MySharedPointer
{
公众:
模板
MySharedPointer和运算符=(T*p)
{
ptr.reset(p,[](void*p){delete static_cast(p);});
归还*这个;
}
//nullptr不是指针,因此它应该有自己的重载。
MySharedPointer和operator=(std::nullptr\t){
ptr.reset();
归还*这个;
}
私人:
std::共享的ptr;
};

实际上,您可能不希望这样。因为这意味着您可以轻松地执行
smartPointer1=rawPointer;smartPointer2=原始指针-现在,谁删除内存?您可以使用模板方法:
template MySmartPointer&MySmartPointer::operator=(T*p)
@Jarod42我考虑过,但我认为这不是我想要的,因为这意味着如果客户端执行
smart\u pointer=raw\u pointer
,传入的参数将是指向指针的指针。我错了吗?@AvivCohn:要获取指向指针的指针,客户端将使用
smart\u pointer=&raw\u pointer
@Jarod42等等:
(T*p)
是否意味着“
T
必须是指针类型”?