Yes, I would go ahead and change it, no concern. I assume constructor will be moved private.

One nit. I would have expected

Connection::shared_ptr myConnection = Connection::open(...); Channel::shared_ptr myChannel = myConnection->openChannel(...channel args);
myChannel->dostuff...




Alan Conway wrote:
Currently the C++ client API is like this:

Connection myConnection;
myConnection.open(...);
Channel myChannel;
myConnection.openChannel(myChannel);
myChannel.dostuff...

I would like to change it to be like this:

Connection::shared_ptr myConnection = Connection::open(...); Channel::shared_ptr myChannel = myConnection->open(...channel args);
myChannel->dostuff...

There are two problems with the current approach:
 - constructor creates "lame" objects, need an open() call to make them
useful.
 - Letting user call constructor directly means we can't change the
implementation class, whereas the second approach allows us to return
anything inheriting from the user-visible class.

The former issue is plaguing me right now, allowing channels and
connections in a created-but-useless state makes it more complicated to
get exception behavior during startup/shutdown right.

Any objections to this change?

Cheers,
Alan.


Reply via email to