Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 13, 2009, 11:12:31 AM (14 years ago)
Author:
scheusso
Message:

trying to solve a double free bug (replaced OrxonoxOverlay pointers with smart pointers)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/orxonox/overlays/OverlayGroup.cc

    r5980 r6054  
    6060    OverlayGroup::~OverlayGroup()
    6161    {
    62         for (std::set<OrxonoxOverlay*>::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
     62        for (std::set< SmartPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
    6363            (*it)->destroy();
     64        this->hudElements_.clear();
    6465    }
    6566
     
    8384    void OverlayGroup::setScale(const Vector2& scale)
    8485    {
    85         for (std::set<OrxonoxOverlay*>::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
     86        for (std::set< SmartPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
    8687            (*it)->scale(scale / this->scale_);
    8788        this->scale_ = scale;
     
    9192    void OverlayGroup::setScroll(const Vector2& scroll)
    9293    {
    93         for (std::set<OrxonoxOverlay*>::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
     94        for (std::set< SmartPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
    9495            (*it)->scroll(scroll - this->scroll_);
    9596        this->scroll_ = scroll;
     
    104105    void OverlayGroup::addElement(OrxonoxOverlay* element)
    105106    {
    106         hudElements_.insert(element);
     107        hudElements_.insert(SmartPtr<OrxonoxOverlay>(element));
    107108        element->setOverlayGroup( this );
    108109        if (this->owner_)
     
    120121    bool OverlayGroup::removeElement(OrxonoxOverlay* element)
    121122    {
    122         if(this->hudElements_.erase(element) == 0)
     123        if(this->hudElements_.erase(SmartPtr<OrxonoxOverlay>(element)) == 0)
    123124            return false;
    124125        return true;
     
    130131        if (index < this->hudElements_.size())
    131132        {
    132             std::set<OrxonoxOverlay*>::const_iterator it = hudElements_.begin();
     133            std::set< SmartPtr<OrxonoxOverlay> >::const_iterator it = hudElements_.begin();
    133134            for (unsigned int i = 0; i != index; ++it, ++i)
    134135                ;
    135             return (*it);
     136            return it->get();
    136137        }
    137138        else
     
    144145        SUPER( OverlayGroup, changedVisibility );
    145146       
    146         for (std::set<OrxonoxOverlay*>::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
     147        for (std::set< SmartPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
    147148            (*it)->changedVisibility(); //inform all Child Overlays that our visibility has changed
    148149    }
     
    152153        this->owner_ = owner;
    153154
    154         for (std::set<OrxonoxOverlay*>::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
     155        for (std::set< SmartPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
    155156            (*it)->setOwner(owner);
    156157    }
Note: See TracChangeset for help on using the changeset viewer.