struct Test {
void doAction() {}
};
// Create and save into a void*
void *ptr = new Test;
// Real use through a Test*
Test *t = static_cast<Test *>(ptr);
t->doAction();
// Delete
delete static_cast<Test *>(ptr);
ptr仅用于保存对象的地址,只有在解除引用时才能得到对象的真实类型。
因此,除非将其解除引用为不相关的类型,否则严格别名规则是可以接受的。