gpt4 book ai didi

c++ - std::shared_ptr 迭代器

转载 作者:行者123 更新时间:2023-11-28 03:34:39 25 4
gpt4 key购买 nike

我有一个遍历 std::shared_ptr 的迭代器。所以 operator++ 将内部存储的共享指针指向下一项。

template<class IT>
class MyIterator
{
public:
...

MyIterator& operator++()
{
_i = ... // Call factory
return *this;
}
private:
std::shared_ptr<IT> _i;
};

我应该如何实现 operator*() 和 operator->() 运算符?

我应该如何测试迭代器是否指向 NULL,即内部共享指针是否指向 NULL。

最佳答案

您应该定义在什么情况下允许用户引用您的类的实例。通常这是“除了结束迭代器或未初始化的迭代器之外的任何东西”。

那么你应该确保 _i 永远不会包含一个可以被取消引用的实例的空指针。

这意味着不需要检查,因为在这种情况下不允许用户调用 operator*operator->。您可以添加一个用于调试,例如:assert(_i.get());

您没有指定迭代器的 value_type 是什么,但假设它是 IT,您可以实现:

IT &operator*() { return *_i; }
shared_ptr<IT> operator->() { return _i; }
// or
IT *operator->() { return _i.get(); }

关于c++ - std::shared_ptr 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11361800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com