如何定义一个函数,将任何类型的指针值作为参数
How can I define a function that takes as a parameter a pointer value of any kind?
我正在实现一个智能指针类来练习。
我已经定义了一个赋值运算符重载,它采用同一类的另一个实例。现在我想定义这个运算符的重载,它接受任何指针。所以我应该能够做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;
};
实例
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- C++ 将 CIN 值存储到任何类型的数组中
- 是否有任何建议来统一函数类型限定符并简化可恶的函数类型?
- 为什么 std::lerp 不适用于任何已实现所需操作的类型?
- 对任何类型的元素数组进行排序
- 任何种类的分数 在任何类型的订单中
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 为什么 c++ 中的 main() 函数不采用除 int 和 void 之外的任何其他返回类型
- 检查模板中 nullptr 的函数指针,了解任何类型的可调用对象
- 如何制作可以接受任何类型的参数的 std::函数和 lambda
- std::map 保存任何值类型
- 为自定义打印调试实现传递任何类型的变量
- MSVC 错误:4 个重载中的任何一个都无法转换所有参数类型
- 我的代码中是否有任何类型的错误,因为它没有给出正确的输出
- 如何在不给它任何类型(如整数)的情况下定义某物?
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 重载运算符:常量与非常量返回类型:任何性能差异
- 通过引用传递自定义类型-任何性能优势