Thread overview | |||||
---|---|---|---|---|---|
|
August 05, 2018 weak_ptr alternative | ||||
---|---|---|---|---|
| ||||
Is there a way to keep track of objects without owning them? That is, could I have a smart pointer that behaves somewhat like this: WeakPtr!Class wptr = getSomeInstance(); auto obj = wptr.peek; //[1] if(obj !is null) { obj.stuff(); } [1]: If wptr points to something that is still reachable from somewhere else (and wasn't yet marked for collection by GC), .peek would return a normal reference of type Class. OTOH, when no active reference is present it should return null. |
August 05, 2018 Re: weak_ptr alternative | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kamil Koczurek | On Sunday, 5 August 2018 at 20:10:49 UTC, Kamil Koczurek wrote: > Is there a way to keep track of objects without owning them? That is, could I have a smart pointer that behaves somewhat like this: > > WeakPtr!Class wptr = getSomeInstance(); > auto obj = wptr.peek; //[1] > if(obj !is null) { > obj.stuff(); > } > > [1]: If wptr points to something that is still reachable from somewhere else (and wasn't yet marked for collection by GC), .peek would return a normal reference of type Class. OTOH, when no active reference is present it should return null. Not sure if there's anything in the language or standard library, but there this: https://github.com/w0rp/dstruct/blob/master/source/dstruct/weak_reference.d Which admittedly I have not tested. |
August 05, 2018 Re: weak_ptr alternative | ||||
---|---|---|---|---|
| ||||
Posted in reply to aliak | On Sunday, 5 August 2018 at 20:57:32 UTC, aliak wrote:
> On Sunday, 5 August 2018 at 20:10:49 UTC, Kamil Koczurek wrote:
>> Is there a way to keep track of objects without owning them? That is, could I have a smart pointer that behaves somewhat like this:
>>
>> WeakPtr!Class wptr = getSomeInstance();
>> auto obj = wptr.peek; //[1]
>> if(obj !is null) {
>> obj.stuff();
>> }
>>
>> [1]: If wptr points to something that is still reachable from somewhere else (and wasn't yet marked for collection by GC), .peek would return a normal reference of type Class. OTOH, when no active reference is present it should return null.
>
> Not sure if there's anything in the language or standard library, but there this:
>
> https://github.com/w0rp/dstruct/blob/master/source/dstruct/weak_reference.d
>
> Which admittedly I have not tested.
Not exactly what I want, in my case the pointer should become null when all other instances go out of reach, not when they're collected, which isn't really predictable in D AFAIK. I can't base logic of my program on this.
Still interesting though, I'll look into its implementation and docs on core.memory, maybe I'll manage to implement it by myself.
|
Copyright © 1999-2021 by the D Language Foundation