www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 14470] New: Reuse of object memory: new emplace overload

https://issues.dlang.org/show_bug.cgi?id=14470

          Issue ID: 14470
           Summary: Reuse of object memory: new emplace overload
           Product: D
           Version: unspecified
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: Phobos
          Assignee: nobody puremagic.com
          Reporter: rswhite4 gmail.com

As mentioned here:
http://forum.dlang.org/thread/wucqfklowovtyhpafjkz forum.dlang.org#post-ydiprvqyjrqgeahqdbwl:40forum.dlang.org
it would be nice if I could reuse object memory easily. Therefore std.conv
should add an emplace overload which takes an object:

----
T emplace(T, Args...)(ref T obj, auto ref Args args) if (is(T == 
class)) {
    if (obj is null)
        return null;

    enum size_t ClassSize = __traits(classInstanceSize, T);
    void[] buf = (cast(void*) obj)[0 .. ClassSize];

    import std.conv : emplace;
    return emplace!(T)(buf, args);
}
----

It would be also nice, if D could add placement-new like C++:
----
Foo f = new Foo(42);
new (f) Foo(23);
----

It looks way more cleaner and since D is aiming to be a system language,
reusing memory is a naturally behaviour.

--
Apr 20 2015