Re: Anonymous union rules against constructors & assignment
Crosbie Fitch wrote:
<johnchx2@yahoo.com> wrote in message
news:1149633364.561734.56320@i39g2000cwa.googlegroups.com...
memcpy doesn't work on non-PODs.
This is because they aren't guaranteed to be laid out anything like you
think they will be.
'memcpy doesn't work on non-PODs' !!!
Wow! That's bad news.
So, let's say I had this:
class A {... }* a;
foo()
{void* p=malloc(sizeof(A));
new(p) A();
a=(A*)malloc(sizeof(A));
memcpy(a,p,sizeof(A)); // Doesn't work if A is non-POD?
free(p);
a->method();
delete a;
}
If memcpy doesn't work on non-POD objects then something truly fundamental
has changed, e.g. C++ has become C#.
It is not valid to use memcpy on non-PODs. If you
choose to do it, you cannot portably cast the resulting
memory to the non-POD type and expect to use it.
I think that it's legal for an implementation to add
a hidden "my address" member to a non-POD object, and
to validate that it's consistent with the object's
address on each access to the object.
This is nothing new, and C++ still isn't C#. It's not
C either; C++'s object model is layered on top of C's,
but non-PODs are a whole world of their own.
-- James
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]