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

delete nie działa

Ostatnio zmodyfikowano 2014-07-30 13:38
Autor Wiadomość
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ę:
C/C++
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 ); // Tutaj wywala!!!
       
        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!
P-114655
unkn9wn
» 2014-07-30 13:33:54
delete nie ustawia wskaźnika na nullptr

nie wiem czy to dobra praktyka

C/C++
delete m_drawable;
m_drawable = nullptr;
  
P-114658
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
/
P-114660
Wrzud
» 2014-07-30 13:38:20
C/C++
template < typename T > void safeDelete( T *& ptr, bool arr = false ) {
    if( !ptr )
         return;
   
    if( arr )
         delete[] ptr;
    else
         delete ptr;
   
    ptr = nullptr;
}
P-114661
« 1 »
  Strona 1 z 1