If I use a default constructor for an iterator, how to check if it was assigned later on?
For pointers, I could do this :
int *p = NULL; /// some code
The best way to do this I can think of is something like
#include #include #include #include namespace nulliterators { typedef std::map nullcntT; nullcntT nullcontainers; template typename containerT::iterator iterator() { containerT* newcnt = new containerT(); std::string cnttypename = typeid(*newcnt).name(); nullcntT::iterator i = nullcontainers.find(cnttypename); if (i==nullcontainers.end()) { nullcontainers.insert(make_pair(cnttypename, newcnt)); return newcnt->end(); }else{ delete newcnt; return (static_cast(i->second))->end(); } } } template typename containerT::iterator nulliterator() { return nulliterators::iterator(); } #include #include int main(){ std::list::iterator nullinitized = nulliterator< std::list >(); std::list somelist; std::list::iterator initialized = somelist.end(); if (nullinitized == nulliterator< std::list >()) std::cout << "nullinitized == nulliterator< std::list >()\n"; //true else std::cout << "nullinitized != nulliterator< std::list >()\n"; if (initialized == nulliterator< std::list >()) std::cout << "initialized == nulliterator< std::list >()\n"; else std::cout << "initialized != nulliterator< std::list >()\n"; //true return 0; }
but it's not exactly a safe solution (because it relies on the non-const global containers in nullcontainers).
nullcontainers