On Fri, 03 Dec 2010 11:23:48 -0500, Bruno Medeiros <brunodomedeiros+s...@com.gmail> wrote:

On 03/12/2010 13:22, Steven Schveighoffer wrote:
> I actually re-read the code and realized that it should work without any
 > changes (sans the issue you bring up below with implicit sharing of
 > immutable).
 >

You mean if you wanted to pass a mutable object back and forth?
No it wouldn't, if I understood you correctly. It would merely compile, but not work (in the general case). So you would create an object, cast it to shared (which means access would now need to be synchronized), and pass it to another thread, right? However when you pass to another thread the TLS part of the object state is lost (aka the _mutable part). That might be valid for cached data that can be recalculated (like the determinant), but it would not be valid for other kinds of mutable data that the object would require and should not be cleared (like the parent Widget in the other example you gave).

the mutable member is not marked as shared. It cannot be accessed on a shared instance. I guess it should be explicitly noted that a logical const notation (such as 'mutable') would not affect shared status, only const status. shared does not implicitly cast to unshared or unshared const.

-Steve

Reply via email to