eliminate - multiple declarations
Function eliminate
Destroys object and nullifies its reference. Does nothing if value
is null.
void eliminate(T)
(
ref T value
)
if (is(T == class) || is(T == interface));
void eliminate(T)
(
ref T* value
)
if (is(T == struct));
Function eliminate
Destroys every element of the array and nullifies everything
void eliminate(T)
(
ref T[] values
)
if (__traits(compiles, eliminate(values[0])));
Function eliminate
Destroys every key (if needed) and value in the associative array, nullifies everything
void eliminate(T, S)
(
ref T[S] values
)
if (__traits(compiles, eliminate(values[S .init])));
Example
class A
{
static int dtorCalls = 0;
int i = 10;
~this()
{
dtorCalls++;
}
}
A a = new A;
a .i = 25;
eliminate(a);
assert(a is null && A .dtorCalls == 1);
eliminate(a);
assert(a is null && A .dtorCalls == 1);
A .dtorCalls = 0;
A[][] as = [[new A, new A], [new A], [new A, new A]];
eliminate(as);
assert(as is null && A .dtorCalls == 5);
eliminate(as);
assert(as is null && A .dtorCalls == 5);
A .dtorCalls = 0;
A[int] amap1 = [1 : new A, 6 : new A];
eliminate(amap1);
assert(amap1 is null && A .dtorCalls == 2);
eliminate(amap1);
assert(amap1 is null && A .dtorCalls == 2);
A .dtorCalls = 0;
A[A] amap2 = [new A : new A, new A : new A];
eliminate(amap2);
assert(amap2 is null && A .dtorCalls == 4);
eliminate(amap2);
assert(amap2 is null && A .dtorCalls == 4);
A .dtorCalls = 0;