template< class T > T* align_new( unsigned int n, unsigned int align_size ) {
char *ptr, *ptr2, *aligned_ptr;
int align_mask = align_size - 1;
ptr = new char[n * sizeof(T) + align_size + sizeof(int)];
if ( ptr == 0 ) return 0;
ptr2 = ptr + sizeof(int);
aligned_ptr = ptr2 + (align_size - ((size_t) ptr2 & align_mask));
ptr2 = aligned_ptr - sizeof(int);
*((int*) ptr2) = (int) (aligned_ptr - ptr);
return (T*) aligned_ptr;
}
template< class T > void align_delete( T *ptr ) {
int *ptr2 = (int*) ptr - 1;
char *p;
p = (char*) ptr;
p -= *ptr2;
delete[] p;
}
使用方法:
align_new<T>(n, size);