I am working on an assignment where I need to implement my own templated Linked List with a corresponding Iterator class, and one of the requirements has me a little confused...
Within the public section of the LIST class I define my ITERATOR class and there is a requirement that its constructor be PRIVATE find below the code itself.

Code:
template<typename T>
class List
{
private:
...
...

public:
class Iterator
{
friend class List<T>;

public:
Iterator() : current(NULL), List(NULL); // default constructor
... all the operator overloads ...

private:
Node<T> *current;
const List<T> *List;

// ??? private constructor. Why? ???
Iterator(const List<T> * List, Node<T> *p)
: List( List ), current( p ){}
};
...
...


So, I can't seem to explain why the iterator non-default construtor has to be PRIVATE - the course tutor said because it needs to be a singleton but I don't see why that is the case, it is my understanding that you want to be able to create multiple instances of iterator for the same like (like a [first,last) combo for example) - so how does this make any sense?

Any help or hints would be much appreciated, anyone have a clue why the constructor needs to be PRIVATE?
Thanks,