防止自定义迭代器获取nullptr
prevent custom iterator from getting nullptr
我为它编写了一个PriorityQueue类和一个迭代器类。但我不明白为什么这些行编译?
PriorityQueue<int,int> pq;
auto z =pq.begin();
z=nullptr;
我的意思是,迭代器不是指针(它里面有一个指针,但它们之间没有转换)。我怎样才能防止这种情况发生呢?
编辑:开始声明:
const iterator begin() const;
您的单参数构造函数
iterator::iterator(Node<Priority,T>* node) : node(node) {}
建立一个用户定义的从指针类型Node<Priority,T>*
到iterator
的转换。由于nullptr_t
隐式地转换为任何指针类型,因此可以将nullptr
转换为iterator
类型。然后,在调用自动生成的移动或复制赋值操作符之前,示例中的z = nullptr;
行隐式地将nullptr
转换为迭代器类型。
修复:添加explicit
关键字到你的构造函数
explicit iterator(Node<Priority,T>* node) : node(node) {}
标准中的规则,第12.3.1节:
没有函数说明符的构造函数
explicit
指定了从其形参类型到其类类型的转换。这种构造函数称为转换构造函数。显式构造函数与非显式构造函数一样构造对象,但仅在直接初始化语法(8.5)或显式使用强制类型转换(5.2.9,5.4)时才这样做。默认构造函数可以是显式构造函数;这样的构造函数将用于执行默认初始化或值初始化(8.5)。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 如何在自删除后将对象设置为nullptr
- 为什么我的for循环不能正确获取argv
- 如何取消对nullptr的屏蔽,返回正确的对象
- C++ - "!pointer"和"pointer == nullptr"的区别?
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 将指针设置为"nullptr"并不能防止双重删除?
- 获取字符串的长度并将其分配给数组
- Cocos2d-x TiledMap,在调用 getLayer() 获取碰撞层时返回一个 nullptr?
- 通过强制转换 nullptr 获取成员变量的偏移量
- 防止自定义迭代器获取nullptr