List:MySQL++« Previous MessageNext Message »
From:Warren Young Date:October 15 2009 1:41pm
Subject:Re: mysqlpp::Connection copy c'tor segfaults
View as plain text  
Jonathan Wakely wrote:
> Eurgh.  Why does that work, but not the OP's usage?

Because most of the time when you copy a Connection, you are merely 
moving it to a new place in memory, not literally wanting to create a 
duplicate connection to the server.

Imagine the chaos if you stored Connections in a set<>.  Not that I 
expect this happens -- ever? -- but its behavior is well-understood so 
it makes a good thought experiment.  I can't think of a real example 
that requires less explanation.

Every time you inserted a new Connection, other nodes would be shuffled 
around in the data structure (a red-black tree, typically) to keep it 
balanced, copying the objects, bouncing connections to the DB server. 
The insert() time would be absolutely no less than the cost of a single 
connection attempt, and that minimum only when no rebalancing is needed.

Is that what you really want?

I could be talked into something like Connection::clone(), but changing 
the copy ctor semantics seems like a bad idea.

> If copying is not safe, it shouldn't be allowed. 

That ignores the useful use-cases where what we want is to just move a 
Connection in memory.  We understand that momentarily there exist two 
Connection objects referring to the same underlying C API connection, 
but one is doomed and won't be used again.

Query works this way, too.
Thread
mysqlpp::Connection copy c'tor segfaultsAdam Nielsen15 Oct
  • Re: mysqlpp::Connection copy c'tor segfaultsWarren Young15 Oct
    • Re: mysqlpp::Connection copy c'tor segfaultsJonathan Wakely15 Oct
      • Re: mysqlpp::Connection copy c'tor segfaultsWarren Young15 Oct
        • Re: mysqlpp::Connection copy c'tor segfaultsJonathan Wakely15 Oct