예제 #1
0
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;
}
예제 #2
0
// new演算子
void* CElement::operator new( size_t t, CCommonData *task_list ){
	return operator_new( t, task_list );
}