gpt4 book ai didi

c++ - C++:迭代器的复制构造函数

转载 作者:行者123 更新时间:2023-12-01 15:05:22 25 4
gpt4 key购买 nike

我目前正在刷新有关该语言的知识,并且发现了以下示例here,该示例定义了迭代器类。我是否会误以为此迭代器中的副本构造函数的定义方式只能创建浅拷贝,还是我遗漏了某些东西?

给定class属性是一个int指针,使用时是否会产生问题?

谢谢。

// std::iterator example
#include <iostream> // std::cout
#include <iterator> // std::iterator, std::input_iterator_tag

class MyIterator : public std::iterator<std::input_iterator_tag, int>
{
int* p;
public:
MyIterator(int* x) :p(x) {}
MyIterator(const MyIterator& mit) : p(mit.p) {}
MyIterator& operator++() {++p;return *this;}
MyIterator operator++(int) {MyIterator tmp(*this); operator++(); return tmp;}
bool operator==(const MyIterator& rhs) const {return p==rhs.p;}
bool operator!=(const MyIterator& rhs) const {return p!=rhs.p;}
int& operator*() {return *p;}
};

最佳答案

“深层”复制的概念仅适用于通过某种引用(例如,指针)拥有另一个对象的对象。迭代器以非所有权方式使用其值(指针),因此复制该指针的值足以维护类的语义。

实际上(正如Caleth在评论中指出的那样),在这种情况下,编译器将默认情况下恰好生成此copy-ctor,因此您甚至不必编写它。

如果您的copy-ctor实际上复制了所指向的数据,那将不是一个很好的迭代器,因为这样您将失去对要迭代的对象的访问权限。

关于c++ - C++:迭代器的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59820550/

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