Zum ersten Problem hab ich leider keine Antwort. Würde mich auch interessieren. Zum zweiten schon:
Code:
union {
object1 teil1;
object2 teil2;
object3 teil3;
} alleTeile;

// Ich weiß nicht obs wirklich geht und ob unions nicht nur mit Primitiven gehen.
// Zugriff geht (theoretisch) über

alleTeile.attribut;

// Wobei ich gerade daran Zweifel, dass das wirklich geht. Denn der Compiler muss ja den Typ des Objekts wissen um das Attribut zu bekommen. Mmh. Vielleicht auch..

((object2)alleTeile).attributVonObject2;
Da fällt mir was anderes ein, das auf jeden fall funktionieren sollte:
Code:
union {
object1* pTeil1;
object2* pTeil2;
object3* pTeil3;
} alleTeile;

// Zugriff:
((object2*)alleTeile)->attributVon2;
Da musst du dich halt selber um den Speicher kümmern.