int main (int argc, char *argv[]) { (void)&argv; int result = 0; char buf [sizeof (S) + 32]; void *p0 = buf; void *p1 = ::operator new (sizeof (S), p0); if (p1 != p0) result = result << 1 + 1; if (argc > 1) operator_new = &operator new; else operator_new = &foo; p1 = operator_new (sizeof (S), p0); if (p1 != p0) result = (result << 1) + 1; S *s = new (p0) S (); if (p1 != p0) result = (result << 1) + 1; if (s->c_ != '\0' || s->d_ != '\0') result = (result << 1) + 1; s = new (p0) S ('x'); if (s->c_ != 'x' || s->d_ != '\0') result = (result << 1) + 1; s = new (p0) S ('y', 'z'); if (s->c_ != 'c' || s->d_ != 'z') result = (result << 1) + 1; // prevent compilers from optimizing the code above away // without actually ever using the result (unless the // test is invoked with command line arguments) if (argc > 1) return result; return 0; }
// new演算子 void* CElement::operator new( size_t t, CCommonData *task_list ){ return operator_new( t, task_list ); }