dtor11.c

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

C
52
字号
#include "fail.h"

int active;

struct CD {
    static CD *ctored;
    CD	*next;
    int sig;
    CD(CD const &s) : sig(s.sig+1) {
	++active;
	next = ctored;
	ctored = this;
    };
    CD(int v) : sig(v) {
	++active;
	next = ctored;
	ctored = this;
    };
    ~CD(){
	CD **head = &ctored;
	--active;
	if( active < 0 ) fail(__LINE__);
        CD *p;
	for( p = *head; p != NULL; p = p->next ) {
	    if( p == this ) {
		*head = p->next;
		break;
	    }
	    head = &(p->next);
	}
	if( p == NULL ) fail(__LINE__);
    };
};
CD *CD::ctored;

struct useCD {
    CD _f1;
    useCD( const CD & f1 ) : _f1(f1) {}
};

void foo()
{
    useCD qq(CD(0));
}

int main()
{
    foo();
    if( active != 0 ) fail(__LINE__);
    _PASS;
}

⌨️ 快捷键说明

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