Я смотрел видео Alexandrescu, у него есть следующий фрагмент кода:
// an example implementation of a single threaded shared_ptr
~SingleThreadPtr() {
if(!c_) {
soSueMe: delete p_;
} else if(--*c_ == 0) {
delete c_;
goto soSueMe;
}
}
Здесь https://youtu.be/Qq_WaiwzOtI?t=36m44s. Он говорит: "Я использую мою знаменитую конструкцию goto soSueMe" и говорит: "Попробуйте написать это без goto и [..], вы увидите, что это сложно".
Что здесь такого сложного? Не следующее одно и то же, и, очевидно, не сложно и понятно:
// an example implementation of a single threaded shared_ptr
~SingleThreadPtr() {
if(!c_) {
delete p_;
} else if(--*c_ == 0) {
delete c_;
delete p_;
}
}
или это не то же самое (тем самым, в первую очередь, усиливая аргументы против goto
)? Какого рода хакерская черная магическая вуду происходит здесь?