Le 12/11/2011 16:27, Andrei Alexandrescu a écrit :
On 11/12/11 9:22 AM, kenji hara wrote:
Here is a pitfall.
If S has the postblit, it is not called with your code.

import core.stdc.stdio;
struct S
{
this(this){
printf("postblit\n");
}
}
void main()
{
S s;
S* ps = [s].ptr;
// does not print "postblit"
}

I've already poted a pull
(https://github.com/D-Programming-Language/dmd/pull/375) to fix it,
but it is not yet merged.

Thanks! This is important. I recall C++ was much more difficult to use
in the period of time where compilers got various copy construction
scenarios wrong. We need to have object copying rock-solid.

Andrei



Well I don't think the postblit should be called if s isn't used after the copy on the heap. This should have the move semantic and not the copy semantic.

Obviously, if s is used after the copy on the heap, the postblit should be called.

Reply via email to