Предположим, что объект X должен работать вечно. X запускает потоки с бесконечными циклами внутри, поэтому программа никогда не выйдет.
Мой вопрос таков: хорошо ли использовать метод join() вообще, например, в деконструкторе, или было бы более целесообразно делать что-то вроде
int main() {
X myX;
while(1) {
}
return 0;
}
Существуют ли различия между этими двумя подходами?
Иногда это требуется, часто это не так. Если вы можете проектировать свое приложение так, чтобы оно не было, тем лучше.
Вы хотели бы назвать join()
если какая-то часть вашей программы должна была ждать, пока не выйдет поток. Это также делает объект потока разрушаемым, поэтому вы не создаете утечку памяти. Нити, которые не были объединены, подобны зомбическим процессам и ресурсам отходов.