On Monday, 23 January 2017 at 22:26:58 UTC, bitwise wrote:
Is it ok to memcpy/memmove a struct in D?

Quote from here:
https://dlang.org/spec/garbage.html

"Do not have pointers in a struct instance that point back to the same instance. The trouble with this is if the instance gets moved in memory, the pointer will point back to where it came from, with likely disastrous results."

This seems to suggests it's ok to move structs around in memory without calling their postblit...but if this is the case, why does postblit even exist, if it's not strictly guaranteed to be called after the struct has been blitted?

You may need the postblit for a *copying* blit. For example, if a struct does reference counting, the postblit will need to increment the count for the new copy. It's a slightly different solution to what C++ solves with copy constructors, assignment operators, etc. Compared to C++, the D approach is a bit simpler and trades off a little flexibility for more opportunities for the compiler to generate efficient code.

Here's the situation in C++, BTW:
http://en.cppreference.com/w/cpp/language/rule_of_three

Reply via email to