auto, var, raii,scope, banana

Chad J gamerChad at _spamIsBad_gmail.com
Wed Aug 2 15:16:46 PDT 2006


Bruno Medeiros wrote:
> Chad J wrote:
> 
>> Regan Heath wrote:
>>
>>> Add the new RAII syntax  and not only does it not crash, but it 
>>> behaves just like a C++ program  would with A being destroyed at the 
>>> end of scope.
>>
>>
>> I hear that such syntax, in C++, means that 'A' will be stack allocated,
>> which AFAIK does not imply RAII.  One example I can think of that would
>> break RAII is if the function gets inlined, then the stack allocated
>> object may not be deleted until some point outside of the scope's end.
>> It will /probably/ be deleted at the end of the function that the
>> enclosing function was inlined into.  I could be wrong about that though.
>>
> 
> Uh, scopes and stack "frames" do not exist only for function frames.
> They exist for any instruction-block/scope. Such that:
> 
>   void func() {
>     auto Foo fooa = new Foo;
>     {
>       auto Foo foob = new Foo;
>     } // foob gets destroyed here
>     ...
>   } // fooa gets destroyed here
> 
> So similarly, function inlining creates a scope/instruction-block , so
> that allocation behavior is preserved. So this code:
> 
>   int a = 2, b = 3;
>   int r = sum(a, b);
> 
> gets inlined to this:
> 
>   int a = 2, b = 3;
>   int r;
>   {
>     r = a + b;
>   } // De-alloc autos if there were any.
> 
> 

Ah.  Thanks for the info.



More information about the Digitalmars-d mailing list