Function share
Return shared IntrusivePtr
pointing to same managed object like parameter ptr
.
shared(Ptr) share(Ptr)
(
auto scope ref Ptr ptr
)
if (isIntrusivePtr!Ptr);
Type of parameter ptr
must be IntrusivePtr
with shared(ControlType)
and shared
/immutable
ElementType
.
Example
static struct Foo{
ControlBlock!(int, int) c;
int i;
this(int i)pure nothrow @safe @nogc{
this .i = i;
}
}
{
auto x = IntrusivePtr!(shared Foo) .make(123);
assert(x .useCount == 1);
shared s1 = share(x);
assert(x .useCount == 2);
import core .lifetime : move;
shared s2 = share(x .move);
assert(x == null);
assert(s2 .useCount == 2);
assert(s2 .load .get .i == 123);
}
{
auto x = IntrusivePtr!(Foo) .make(123);
assert(x .useCount == 1);
///error `shared IntrusivePtr` need shared `ControlType` and shared `ElementType`.
//shared s1 = share(x);
}