Boost logo

Boost :

From: Robert Dailey (rcdailey_at_[hidden])
Date: 2008-03-19 18:31:03


Hi,

Below I have posted code that I'm trying to clean up. I'm specifically
trying to clean up the MainFunction() implementation. You'll notice that I'm
creating an object on the heap, Initializing it, and if the initialization
fails I simply delete the object. However, if it succeeds I proceed to add
it to my ptr_vector container and keep it. There are a few things to be
cautious about, however:

1) Connect() may or may not throw exceptions, which would ultimately result
in a memory leak.
2) The Socket object is not copy constructable.

One idea I thought of to clean this up was to define my ptr_vector as a
container of shared_ptr<Socket> objects, however I'm not sure if this is
recommended. It would definitely solve the problem of exceptions being
thrown. Perhaps there's a boost::shared_ptr_vector somewhere I don't know
about :)

class Socket
{
public:
    bool Connect() { /* Assume valid implementation */ return false; }
};

boost::ptr_vector<Socket> sockets;

void MainFunction()
{
    Socket* mySocket = new Socket;

    if( mySocket->Connect() )
    {
        sockets.push_back( mySocket );
    }
    else
    {
        delete mySocket;
    }
}


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk