Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

std::shared_ptr

Ostatnio zmodyfikowano 2017-04-13 16:46
Autor Wiadomość
marcolo2307
Temat założony przez niniejszego użytkownika
std::shared_ptr
» 2017-04-13 15:33:11
Cześć!

Korzystam z TGUI (GUI dla SFML2).

Gdy próbuję załadować widget z tgui::Theme, za pomocą metody load, występuje problem w metodzie readFile. Rzucany jest tam wyjątek, który informuje o błędnej nazwie pliku, nie mogę go złapać nawet za pomocą catch (...). Prawdopodobnie rzucane są 2 wyjątki, debugger pokazuje mi, że jakiś jest rzucany w linijce z }. Kod pochodzi z pliku shared_ptr_base.h z biblioteki standardowej.

C/C++
_Tp *
operator ->() const noexcept
{
    _GLIBCXX_DEBUG_ASSERT( _M_ptr != 0 );
    return _M_ptr;
}

Mój kod:
C/C++
tgui::Theme::Ptr theme = std::make_shared < tgui::Theme >( "x.txt" );

try
{
    tgui::Button::Ptr button = theme->load( "Button" );
}
catch(...)
{
   
}

Implementacja ładowania tgui::Theme: https://github.com/texus/TGUI​/blob/master/src/TGUI/Loading​/ThemeLoader.cpp.
P-160107
DejaVu
» 2017-04-13 16:16:59
Wejdź debuggerem w źródła i znajdź konkretną linijkę, która powoduje rzucenie wyjątku. To jest najkrótsza droga pod warunkiem, że masz symbole debugowe do bibliotek, których używasz.
P-160108
marcolo2307
Temat założony przez niniejszego użytkownika
» 2017-04-13 16:46:00
Wyjątek jest rzucany na końcu tej funkcji od shared_ptr. Na nim debugger się zatrzymuje i wyłącza. Kolejny wyjątek w teorii powinien być w metodzie readFile i on pokazuje się przy zwykłym crashu, bez debuggera.

Nie mogę wejść w źródła TGUI, ale wyjątek z tym opisem jest tylko w jednym miejscu.

Nawet kiedy tgui::Theme nie jest shared_ptr tylko zwykłą zmienną lokalną (niezgodnie z zaleceniami TGUI) to nie mogę złapać tego wyjątku.

Przykład jest taki jak w dokumentacji, może znalazłem bug...

Sprawdziłem kod z dokumentacji, jest ten sam problem. Najwyraźniej muszę czekać na nowszą wersję.
P-160109
« 1 »
  Strona 1 z 1