Boost logo

Boost Users :

From: Patrick Loney (Patrick.Loney_at_[hidden])
Date: 2008-03-27 12:37:34


Hi,

I've got some objects which are stored in a DB that are being used in a
multi-threaded application. I'm trying to avoid loading the same object
from the db and would like the added bonus of changes made by one thread
being instantly available to all others (with suitable mutex protection
provided during a change but they are predominantly read-only)

I've decided that shared_ptrs fit the bill and the following code will
do the job but, never having used them before I was hoping some one
could have a look to make sure I'm not mis-understanding the reason for
shared_ptrs or missing a simpler method to achieve the same results.

Thanks in advance,
Patrick

class dummy
{
public:
        dummy( std::string& id ) : m_id( id ){/*load the object from
db*/}
        virtual ~dummy(){}
        const std::string& objectid(){ return m_id; }
private:
        std::string m_id;
};

typedef boost::shared_ptr<dummy> ListObjectSharedPtr;

dummy& getOrLoadObject( std::string &id )//should I be returning a ref?
{
        static std::list<ListObjectSharedPtr> objectlist;

        for( std::list<ListObjectSharedPtr>::iterator it =
objectlist.begin();
it != objectlist.end(); ++it )
        {
                if( it->get()->objectid() == id )
                        return *it->get();
                if( it->use_count() == 0 )//should this be == 1 as the
object in //the
list is always present?
                {
                        objectlist.erase( it );
                        --it;
                }
        }
        ListObjectSharedPtr lo( new dummy( id ) );
        objectlist.push_back( lo );
        return *objectlist.back().get();
}

******************************************************************************

"This message and any attachments are solely for the intended recipient and may contain confidential and privileged information. If you are not the intended recipient, any disclosure, copying, use, or distribution of the information included in this message and any attachments is prohibited. If you have received this communication in error, please notify us by reply e-mail and immediately and permanently delete this message and any attachments. Thank you."

Interactive Transaction Solutions Ltd (2473364 England)

Registered Office:
Systems House,
Station Approach
Emsworth PO10 7PW

**********************************************************************

Ce message électronique contient des informations confidentielles à l'usage unique des destinataires indiqués, personnes physiques ou morales. Si vous n'êtes pas le destinataire voulu, toute divulgation, copie, ou diffusion ou toute autre utilisation de ces informations, est interdite. Si vous avez reçu ce message électronique par erreur, nous vous remercions d'en avertir son expéditeur immédiatement par email et de détruire ce message ainsi que les éléments attachés.

Interactive transaction Solutions SAS- France (RCS Pontoise : 489 397 877)

Siège social :
Parc Saint Christophe,
10, Avenue de l’Entreprise
95865 Cergy-Pontoise Cedex

______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email
______________________________________________________________________


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net