Steven Schveighoffer wrote:
I guess I'm not really sure what the "acquire" method does. I saw you mention it in another post, but with no explanation as to what it actually does, just that it was needed. I'm sure I'm not getting what should be obvious, but if you could enlighten, I would appreciate it :)

Say you have an object obj that has a Matrix property and you have a Matrix object handy. The Matrix is rather resource intensive so you'd rather not copy it unwittingly. Conventionally, if you say:

Matrix m;
... fill matrix ...
obj.matrix = m;

then m is copied into obj.matrix (there is the by-value call to set property). Now it's possible to arrange things such that m is destructively copied, but as the auto_ptr disaster has shown, it's not that intuitive to make assignment destroy the right hand side.

So we'd need a distinct method:

obj.matrix.acquire(m);

That method takes the matrix by reference, sucks its life out of it, and leaves an empty shell behind. Pretty much like in your average horror movie.

Having the two functions seems like a reasonable baggage compromise, if you want to control the get and set methods of a property and pass that control to an underlying function, you need at least that. If we start generalizing it to anything, then it starts looking like struct interfaces would be more suitable. For example, you could allow setting an int property using both an int and a string, do you want to pass both setters to a function? I think limiting it to just a set and a get function should be sufficient.

With only get and set I can't implement a nothrow swap, which kinda bends me out of shape.


Andrei

Reply via email to