DIP1000: Scoped Pointers

Nick Treleaven via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Mon Aug 22 05:08:27 PDT 2016


On Thursday, 18 August 2016 at 17:05:05 UTC, Dicebot wrote:
> On 08/11/2016 04:38 PM, Sönke Ludwig wrote:
>> That will just leave one hole in conjunction with the @trusted 
>> destructor, which is (presumably) not easy to fix without much 
>> larger changes to the type system, as well as to how container 
>> types are built. It is still vulnerable to artificial 
>> shortening of the elements' lifetime, e.g. by using opAssign() 
>> or destroy():
>> 
>> @safe {
>>     RefCountedSlice!int s = ...;
>>     scope int* el;
>>     el = &s[0];
>>     s = RefCountedSlice.init;
>>     *el = 12; // oops
>> }
>
> I asked Walter about this in more details and right now plan is 
> to address it in a separate DIP that provides more integration 
> between reference counting and compiler. Within DIP1000 terms 
> such destructor must not be marked as @safe - essentially, it 
> will only enable @safe usage of stack allocated data in its 
> initial form.

I think RefCountedSlice can have a @trusted destructor so long as 
opAssign is @system. (I'll likely make a PR to the DIP soon).



More information about the Digitalmars-d-announce mailing list