Wpis z mikrobloga

@bartoneczek: Łapanie przez referencję jest dobrą praktyką. Rzucasz obiekt.

Rzucenie wyjątku niesie za sobą stack unwinding, czyli wywołanie destruktorów wszystkiego co jest na stosie aƶ do momentu znalezienia pasującego catcha. Jeśli jakiś z destruktorów rzuci (bardzo zła praktyka) to masz sytuację 2 wyjątków ⟶ automatyczny call do

std::terminate
@KrzaQ2: moje Exception nie rzuca nic w konstruktorze, robi dokładnie to samo co konstruktor SocketException, czyli przypisuje wartości.

W destruktorach również nic się nie dzieje. Przekazuję teraz obiekt przez referencję i korzystam z obiektów tymczasowych. I wciąż ten sam problem. :(
@KrzaQ2: wygląda na to że znalazłem rozwiązanie problemu. Tzn znalazłem, ale nie wiem dlaczego.

W klauzuli try wywoływałem wątek. W wątku tym działały funkcje które rzucały wyjątek (myślałem że catch złapie te wyjątki - no i niby łapał, ale coś nie tak jak chciałem). Nie rozumiem co jak i dlaczego, ale kiedy wywaliłem wątek z try {} i dałem try {} w funkcji obsługującej wątek, wszystko zaczęło działać.
@bartoneczek: Kaƶdy wątek ma własny stos. Rozpoczęcie innego wątku nie wpływa na twórcę i twórca kontynuuje dalej. W takim wypadku miałeś rzucony wyjątek bez ƶadnego catcha, więc zostało zawołane

std::terminate