//D-CODE
struct MyStruct{
    int id;
    this(int id){
        writeln("ctor");
    }
    ~this(){
        writeln("dtor");
    }
}

MyStruct* obj;
void push(T)(auto ref T value){
    obj[0] = value;
}

void main()
{
    obj = cast(MyStruct*)malloc( MyStruct.sizeof );
    push(MyStruct(1));
}

OUTPUT:
ctor
dtor
dtor


//C++ CODE
#include <iostream>
#include <string>
using namespace std;
void writeln(string s){ cout << s << '\n'; }

struct MyStruct{
    int id;
    MyStruct(int id){
        writeln("ctor");
    }
    ~MyStruct(){
        writeln("dtor");
    }
};

MyStruct* obj;
template<class T>
void push(T&& value){
    obj[0] = value;
}


int main()
{
    obj = (MyStruct*)malloc( sizeof(MyStruct) );
    push(MyStruct(1));
    return 0;
}

OUTPUT:
ctor
dtor


I didnt expected to see two dtors in D (this destroy any attempt to free resources properly on the destructor). Can someone explain why is this happening and how to achieve the same behavior as c++?
Thanks :)

Reply via email to