Подозреваю, что должно быть вот так:
void SetNextHandler(Handler* next_handler) {
if (next) {
next->SetNextHandler(next_handler); // <- next, не this
} else {
this->next = next_handler;
}
}
Иначе у вас бесконечная рекурсия получится.
Но вообще, это не самый оптимальный алгоритм, ибо сложность добавления нового хендлера - O(N), хотя можно было бы сделать O(1), если не важен порядок вызова.
А еще, можно бы завести виртуальную функцию, которая будет занимать
только хендлингом. Это сделает код более надежным и позволит избежать
Handler::HandleRequest(data);
в конце каждого хендлера.