[C/C++] Obsługa setjmp/longjmp w C++
Ostatnio zmodyfikowano 2014-12-09 20:43
amilkwes Temat założony przez niniejszego użytkownika |
[C/C++] Obsługa setjmp/longjmp w C++ » 2014-12-08 22:23:59 Oczywiście, chciałbym unikać w ogóle używania setjmp/longjmp w C++ jednakże, nie zawszę mogę to zrobić.
Często w projektach używam bibliotek napisanych w C i zdarza się, że wykorzystują one setjmp/longjmp. Zastanawiam się jak w bezpieczny sposób wyseparować ten mechanizm w C++? |
|
pekfos |
» 2014-12-09 18:05:01 Jeśli skoki zamykają się w obrębie implementacji jednego wywołania funkcji bibliotecznej (tj skok nie 'leci' przez twój kod), to afaik to już jest wystarczające odseparowanie. Ewentualne odwijanie stosu, mając po drodze wywołania C++, może już powodować niezdefiniowane zachowanie - np w przypadku obiektów na stosie o nietrywialnych destruktorach, tablic VLA (to nawet w przypadku C), itp. |
|
amilkwes Temat założony przez niniejszego użytkownika |
» 2014-12-09 20:43:26 Tak, tego jestem świadom, że skok nie może lecieć przez kod, który "robi coś w tle". Jednak jestem ciekaw czy nie istnieje jakiś wzorzec albo po prostu koncepcja na opakowanie tego w jakiś mechanizm, który robił by to skutecznie i elegancko, ew. pozwalał konwertować to do wyjątków.
Biblioteki z języka C często w ten sposób zwracają informację o błędzie, więc nie jest to wewnętrzna implementacja a interfejs dla użytkownika. Oczywiście w trakcie korzystania z biblioteki potrzebne są obiekty z nietrywailnymi destruktorami. Ciężko zapewnić brak ich obecności i nie potrafię wypracować sobie jednolitej obsługi tego i narazie obsługuję to z doskoku. |
|
« 1 » |