You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently the moved from object has to be reinitialized in order to avoid double freeing in it's destructor.
Both operations reinitialization and destroying the moved from object are superfluous, if we had a mean to tell the compiler not to destroy a particular object.
https://github.com/D-Programming-Language/phobos/blob/41d1162619039e8e535060b920ff54cc2c44ebbb/std/algorithm/mutation.d#L1015
A destructive move intrinsic would turn an object into an rvalue, disable destruction of the moved from object, and disallow any further usage of the moved from object.
The object must be unaliased to make destructive move @safe.
Destructively moving anything but named variables (such as fields or single array elements) would be prohibited as it adds compiler complexity or runtime overhead.
The text was updated successfully, but these errors were encountered:
code (@MartinNowak) commented on 2015-09-02T08:05:00Z
This should only be allowed on "value" declarations to avoid complications like destructive move via ref parameter in a function call or moving of array elements.
code (@MartinNowak) commented on 2016-10-09T18:07:45Z
DMD internally uses a storage class flag (STCnodtor) for a similar purpose.
So an @unsafe__nodtor(var) intrinsic to instruct the compiler to not destruct a variable could hopefully just set this flag.
Martin Nowak (@MartinNowak) reported this on 2015-04-19T23:31:37Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=14466
Description
The text was updated successfully, but these errors were encountered: