Is it somehow possible to reuse the memory of an object?

My current idea is:
----
@nogc
T emplace(T, Args...)(ref T obj, auto ref Args args) nothrow if (is(T == class)) {
    if (obj is null)
        return null;

    enum size_t SIZE = __traits(classInstanceSize, T);

    void[] buf = (cast(void*) obj)[0 .. SIZE];
    buf = typeid(T).init[];
    //obj = cast(T) buf.ptr;

    static if (args.length)
        obj.__ctor(args);

    return obj;
}

Foo f = new Foo(42);
Foo f2 = emplace(f, 23);
----

But is there a more elegant way to do that? Maybe without calling the internal __ctor?

In C++ you can do that:

----
#include <iostream>

class Foo {
public:
        int id;
        
        explicit Foo(int _id) : id(_id) { }
};

int main() {
        Foo* f = new Foo(42);
        std::cout << f << ':' << f->id << std::endl;
        new (f) Foo(23);
        std::cout << f << ':' << f->id << std::endl;
        delete f;
}
----

Reply via email to