[cap-talk] Composability and RAII

James A. Donald jamesd at echeque.com
Sun Mar 6 14:33:11 PST 2011


On 2011-03-06 1:18 PM, David-Sarah Hopwood wrote:
> That is, the correctness of the application depends on choosing
> precisely when the object is disposed. For example, if a file handle is
> opened for writing, then closing the handle will flush buffered writes,
> and it is (almost always) important for that to be done at a particular
> time.
>
> Suppose that we have an outer object that is not a resource, but which
> holds a reference to an inner resource. Then I claim that either:
>
> a) the classification of the outer object as a non-resource was incorrect,
>     because it does require explicit disposal, or
> b) the point at which the inner object should be disposed is not the
>     point at which the outer object goes out of scope, but some earlier
>     point in the lifetime of the outer object.
>
> In case a), the application needed to be aware of when the outer object
> should be disposed; it is wrong for it to be disposed implicitly by RAII
> (in the sense that it would lead to error-prone and unmaintainable code).
> In case b), RAII disposes the inner object too late.


If the resource is represented by a variable with particular scope, then 
we ensure the scope of the resource with a single line of code, rather 
than two lines quite distant from each other, which two lines have to be 
kept in agreement, and probably will drift out of agreement as the code 
gets bigger and bigger and more and more people work on the code.


More information about the cap-talk mailing list