except42.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 40 行

C
40
字号
#include "fail.h"

static int zz;

struct T : _CD {
    T();
    ~T();
};

T::T(){++zz;}
T::~T(){--zz;}

struct A : _CD {
    A();
    ~A();
};

A::A(){++zz;}
A::~A(){--zz;}

short foo( A *a, int b) {
    T v1;
    if( b == 1 ) {
	return 1;
    }
    delete a;
    return 0;
}

int main() {
    A *p = new A();
    if( foo( p, 1 ) != 1 ) _fail;
    // no delete should have happened
    if( zz != 1 ) _fail;
    if( foo( p, 0 ) != 0 ) _fail;
    // delete should have happened
    if( zz != 0 ) _fail;
    _PASS;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?