Re: Anonymous union rules against constructors & assignment
""Crosbie Fitch"" <crosbie@digitalproductions.co.uk> skrev i
meddelandet news:nrGdndeyd-B6ORvZnZ2dnUVZ8s6dnZ2d@bt.com...
<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.
How would it work?!
Try this one:
class nonPOD
{
public:
nonPOD() : ref(&y)
{ }
int gety() const
{ return ref; }
private:
int y;
int& ref;
nonPOD(const nonPOD&);
nonPOD& operator=(const nonPOD&);
};
This class can be constructed, but it cannot be copied or assigned
(because the copy constructor and assignment operator are private).
Do you think it would be a good idea to allow memcpy to make copies?
How would the gety() function work if the class object is
moved/copied?
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?
No. What if class A contains a pointer to some other data. Will that
data be deleted once, twice, or not at all?
free(p);
a->method();
delete a;
}
That's all. It's such a weeny little thing.
No, it's not. It is a fundamental change!
Bo Persson
---
[ 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 ]