On Mon, 27 Jul 2009, Andrei Alexandrescu wrote: > Bill Baxter wrote: > > The requirement to add the post-blit is a little annoying. If a > > ValueContainer is made fundamental and it is built initially out of > > components with value semantics, then no explicit post-blit will be > > necessary. However if you go the other way and start with a > > RefContainer then a post-blit will be necessary when you implement the > > ValueContainer based on it. So to me it seems a little better to go > > with the ValueContainer as the base implementation. > > I think it's a matter of the most frequent use. I used to be a staunch > supporter of values for containers, until Walter revealed to me that in STL > you have value containers to constantly worry about adding the "&" everywhere. > Implicitly copying containers is 95% of cases an error in C++ code. Witness > all that advice about pass by reference etc. So why make that the default, one > might ask? Better go with the flow and make the default case the easy case > (reference), and if someone does want a value, have them write > Value!Container. > > > Andrei
There's two layers to talk about, the container itself and the elements it contains. I agree that the container itself should be ref given the above logic (which matches my experience). The less obvious one, imho, is the default of the contained. Again, c++ uses value containership, but an awful lot of the time people (including myself) use essentially a ref (by way of a smart pointer). Often it's due to weak ownership semantics, and thus iffy design, but it is what it is. Later, Brad