Sometimes you need to clear all the members of a struct after it was used. With large structs, you usually use memset() for that purpose. However, for smaller structs that occupy 2, 4 or 8 bytes of memory, calling memset() is rather expensive in terms of performance:
struct Date { char day; char month; short year; }; // Date occupies 4 bytes Date d; d.day = 13; d.month = 4; d.year = 2000; // use d memset(&d, 0, sizeof (d)); // now clear it
You can avoid the overhead of calling memset() by using the following technique instead:
// convert a pointer to d to a pointer to int int * pfake = reinterpret_cast (&d); // 1 // assigns all d's members to zero through fake ptr *pfake = 0; // 2
The first line of code creates a pointer to int (assuming 32-bit int size) that actually points to a Date object, d. Of course, cheating is necessary to convince the compiler to accept this conversion. This is why reinterpret_cast is used. The second line dereferences that fake int pointer and writes the value 0 to its memory block. This ensures that all the bits in d are set to zero.
You can perform this two-step operation in a single statement like this:
*( reinterpret_cast (&d) ) = 0;
However, this is less readable and more error prone.