2015-02-11 4 views
1

Как правильно реализовать конструктор копирования для моего итератора, зная, что указатель на объект данных является приватным? Нужно ли мне создавать аксессор для этого указателя? Разве это не плохо?Внедрение конструктора копии итератора

+1

Вероятно, для вашего итератора вам не нужен конструктор копий или оператор присваивания (если это так, у вас может возникнуть сомнительный дизайн). Вы можете привести пример. –

+0

@ DieterLücking Мне действительно не нужен тот, который кажется, спасибо за замечание. –

ответ

2

Поскольку вы определяете конструктор копирования для итератора внутри реализации самого итератора, нет никакой необходимости, чтобы сделать скрытый указатель доступен, с или без аксессора: конструктор копирования будет иметь доступ к нему даже если это личное, так что не о чем беспокоиться:

template <class T> 
class MyIter { 
    T *private_ptr; 
public: 
    MyIter(const MyIter<T> &other) : private_ptr(other.private_ptr) {} 
    ... // More constructors and member functions 
}; 
0

Все функции-члены класса имеют доступ к элементам данных класса. Это также относится к различным объектам того же типа.

class Foo() 
{ 
private: 
    int bar; 
public: 
    void foobar(Foo & different) { bar = different.bar; } 
}; 
+0

@ DieterLücking 'foobar()' это функция, а не конструктор. – NathanOliver