import std.stdio;
struct Foo
{
int[] a;
int b;
this(this)
{
writeln("blit copy is done now let's post-blit'");
// a memory is the same as the source
a = a.dup;
// a memory is now only for this instance
}
}
void main()
{
Foo foo1 = Foo([1,2], 3);
writeln("blit copy will happen");
Foo foo2 = foo1;
// would be true without the "postblit"
assert(foo1.a.ptr != foo2.a.ptr);
}
aW1wb3J0IHN0ZC5zdGRpbzsKCnN0cnVjdCBGb28KewogICAgaW50W10gYTsKICAgIGludCBiOwogICAgdGhpcyh0aGlzKQogICAgewogICAgICAgIHdyaXRlbG4oImJsaXQgY29weSBpcyBkb25lIG5vdyBsZXQncyBwb3N0LWJsaXQnIik7CiAgICAgICAgLy8gYSBtZW1vcnkgaXMgdGhlIHNhbWUgYXMgdGhlIHNvdXJjZQogICAgICAgIGEgPSBhLmR1cDsKICAgICAgICAvLyBhIG1lbW9yeSBpcyBub3cgb25seSBmb3IgdGhpcyBpbnN0YW5jZQogICAgfQp9Cgp2b2lkIG1haW4oKQp7CiAgICBGb28gZm9vMSA9IEZvbyhbMSwyXSwgMyk7CiAgICB3cml0ZWxuKCJibGl0IGNvcHkgd2lsbCBoYXBwZW4iKTsKICAgIEZvbyBmb28yID0gZm9vMTsKICAgIC8vIHdvdWxkIGJlIHRydWUgd2l0aG91dCB0aGUgInBvc3RibGl0IgogICAgYXNzZXJ0KGZvbzEuYS5wdHIgIT0gZm9vMi5hLnB0cik7Cn0=