new12.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 151 行
C
151 行
#include "fail.h"
int dummy;
struct D {
int __u[35];
void operator delete( void *p );
void operator delete []( void *p );
};
struct DS {
int __u[35];
void operator delete( void *p, unsigned );
void operator delete []( void *p, unsigned );
};
struct S00 {
int __u[35];
} *s00[2];
struct S01 : D {
} *s01[2];
struct S02 : DS {
} *s02[2];
struct S10 {
int __u[35];
~S10() {}
} *s10[2];
struct S11 : D {
~S11() {}
} *s11[2];
struct S12 : DS {
~S12() {}
} *s12[2];
struct S20 {
int __u[35];
~S20() {}
} *s20[2];
struct S21 : D {
~S21() {}
} *s21[2];
struct S22 : DS {
~S22() {}
} *s22[2];
struct S30 {
int __u[35];
virtual ~S30() {}
} *s30[2];
struct S31 : D {
virtual ~S31() {}
} *s31[2];
struct S32 : DS {
virtual ~S32() {}
} *s32[2];
struct S40 {
int __u[35];
~S40() {--dummy;}
} *s40[2];
struct S41 : D {
~S41() {--dummy;}
} *s41[2];
struct S42 : DS {
~S42() {--dummy;}
} *s42[2];
struct S50 {
int __u[35];
virtual ~S50() {--dummy;}
} *s50[2];
struct S51 : D {
virtual ~S51() {--dummy;}
} *s51[2];
struct S52 : DS {
virtual ~S52() {--dummy;}
} *s52[2];
template <class T>
void foo( T **p ) {
delete p[0];
delete [] p[1];
}
void D::operator delete( void *p )
{
if( p != NULL ) fail(__LINE__);
}
void D::operator delete []( void *p )
{
if( p != NULL ) fail(__LINE__);
}
void DS::operator delete( void *p, unsigned )
{
if( p != NULL ) fail(__LINE__);
}
void DS::operator delete []( void *p, unsigned )
{
if( p != NULL ) fail(__LINE__);
}
int main() {
foo( s00 );
foo( s01 );
#if __WATCOMC__ > 1060
foo( s02 );
#endif
foo( s10 );
foo( s11 );
#if __WATCOMC__ > 1060
foo( s12 );
#endif
foo( s20 );
foo( s21 );
#if __WATCOMC__ > 1060
foo( s22 );
#endif
foo( s30 );
foo( s31 );
foo( s32 );
foo( s40 );
foo( s41 );
#if __WATCOMC__ > 1060
foo( s42 );
#endif
foo( s50 );
foo( s51 );
foo( s52 );
_PASS;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?