lista dwukierunkowa, operator*, co robić gdy lista jest pusta

0

witajcie, piszę listę dwukierunkową i mam problem bo nie wiem jak prawidłowo zorganizować zwracanie wartości w przypadku gdy lista jest pusta (wskaźniki w obie strony ustawione na 0 czyli lista::iterator dostaje wskaźnik o wartości 0). Próbowałem wymyślić coś takiego:

			T& operator*()
			{
				try
				{
					if(val!=0)
						return val->value;
					else
						throw string("WARNING: null pointer detected, list is empty");
				}
				catch(std::string error)
				{
					cout << error << endl;
                                        return ... ? //co tu zwracać,
				}
			}

val jest wskaźnikiem typu element przechowującego wartości typu T oraz wskaźniki na następny i poprzedni element. zastanawiam się jak to prawidłowo powinno być rozwiązane. Czy może powinienem sprawdzać robiąc lista.begin() czy lista jest pusta i jeżeli jest to alokować nową wartość wstawiając ją do listy jako pierwszy element. Tylko to bez sensu bo nigdy nie wiem jaki ktoś dostarczy konstruktor, może nie będzie konstruktora() i wtedy się program posypie.

0

Nic w takim wypadku nie zwracać i nie łapać tego wyjątku.

0

Rzucasz wyjątek i od razu go łapiesz. Jaki to ma sens?
Ja bym się nie przejmował. Niech się odwołuje do nulla. Ewentualnie daj assert(val != 0);

0

@Karolaq dobrze pisze, nic nie sprawdzaj. To kod korzystający twojej listy powinien zadbać o to, żeby nie dobierał się do nieistniejącego elementu. Jeśli są odwołania do nieistniejącego elementu, znaczy, że kod jest źle napisany, lista nie ma z tym nic wspólnego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1