On Monday, 20 September 2021 at 12:23:00 UTC, Learner wrote:
I was expecting something like going out of scope for that

```(D)
import std.stdio;

struct S
{
    ~this()
    {
        writeln("S is being destructed");
    }
}

void main()
{
        S[int] aa;
    aa[1] = S();
    aa.remove(1);
    writeln("Why no dtor call on remove?");
}

I was expecting S instance dtor called
S is being destructed
```

I think it *is* being called:
```d
import std.stdio;

struct S
{
        int a;
        this(int param){
                a = param;
        }
        ~this()
        {
            writeln("S(",a,") is being destructed");
        }
}

void main()
{
        S[int] aa;
        aa[1] = S(5);
        aa.remove(1);
        aa[1] = S(10);
        //writeln("Why no dtor call on remove?");
}

Output:
S(5) is being destructed
S(10) is being destructed
```
If the destructors were being executed based on the ending of scope, `S(10)` would have been destroyed first.

Reply via email to