delete nie działa
Ostatnio zmodyfikowano 2014-07-30 13:38
oputyk Temat założony przez niniejszego użytkownika |
delete nie działa » 2014-07-30 13:06:47 Witam wszystkich! Mam taką dziwną sytuację: BaseDrawable & BaseDrawable::operator =( const BaseDrawable & BaseDrawable ) { delete m_drawable; m_circle = BaseDrawable.m_circle; if( BaseDrawable.m_sprite ) { m_sprite = new sf::Sprite( * BaseDrawable.m_sprite ); m_drawable = m_sprite; } else { if( m_circle ) m_shape = new sf::CircleShape( *( static_cast < sf::CircleShape *>( BaseDrawable.m_shape ) ) ); else m_shape = new sf::ConvexShape( *( static_cast < sf::ConvexShape *>( BaseDrawable.m_shape ) ) ); if( m_drawable != m_shape && m_drawable != nullptr ) exit( 1 ); m_drawable = m_shape; } return * this; }
Więc mówiąc w skrócie - wygląda na to, że w miejscu delete m_drawable , operator delete nie zawsze zwalnia pamięć z obiektu m_drawable , gdyż warunek if( m_drawable != m_shape && m_drawable != nullptr ) się spełnia, czyli te dwa wskaźniki są od siebie różne, a m_drawable nie jest równy nullptr . Dodatkowo w miejscu m_drawable = m_shape; czasami potrafi mi wywalić błąd podczas run-time'u aplikacji. Dodam, że: sf::Drawable * m_drawable Z góry dzięki za pomoc! |
|
unkn9wn |
» 2014-07-30 13:33:54 delete nie ustawia wskaźnika na nullptr nie wiem czy to dobra praktyka delete m_drawable; m_drawable = nullptr;
|
|
oputyk Temat założony przez niniejszego użytkownika |
» 2014-07-30 13:37:03 Dzięki pomogło. Jak zwykle geniusz tkwi w prostocie :P PS: Myślałem, że delete ustawia na nullptr / |
|
Wrzud |
» 2014-07-30 13:38:20 template < typename T > void safeDelete( T *& ptr, bool arr = false ) { if( !ptr ) return; if( arr ) delete[] ptr; else delete ptr; ptr = nullptr; }
|
|
« 1 » |