cxx-ivars-2.mm
来自「用于进行gcc测试」· MM 代码 · 共 77 行
MM
77 行
// Check if the '- .cxx_construct' and '-.cxx_destruct' methods get called// and if they perform their desired function.// { dg-do run { xfail { "*-*-*" } } } PR27247/PR23681// { dg-options "-fobjc-call-cxx-cdtors" }#include <objc/Object.h>#include <stdlib.h>#define CHECK_IF(expr) if(!(expr)) abort()static int ctor1_called, ctor2_called, dtor1_called;struct bar { int a, b; bar(void) { a = 5; b = 6; ctor1_called++; } ~bar(void) { a = b = 99; dtor1_called++; }};struct boo: bar { int c; boo(int _c = 9): c(_c) { ctor2_called++; }};@interface Baz: Object {@public bar aa;}@end@implementation Baz@end@interface Foo: Baz {@public int a; boo bb; bar b; float c; bar d;}@end@implementation Foo@endint main (void){ CHECK_IF(!ctor1_called && !ctor2_called && !dtor1_called); /* are we sane? */ Baz *baz = [Baz new]; CHECK_IF(ctor1_called && !ctor2_called && !dtor1_called); CHECK_IF(baz->aa.a == 5 && baz->aa.b == 6); ctor1_called = 0; /* reset */ [baz free]; CHECK_IF(!ctor1_called && !ctor2_called && dtor1_called); dtor1_called = 0; /* reset */ Foo *foo = [Foo new]; CHECK_IF(ctor1_called && ctor2_called && !dtor1_called); CHECK_IF(foo->bb.a == 5 && foo->bb.b == 6 && foo->bb.c == 9); CHECK_IF(foo->b.a == 5 && foo->b.b == 6); CHECK_IF(foo->d.a == 5 && foo->d.b == 6); ctor1_called = ctor2_called = 0; /* reset */ [foo free]; CHECK_IF(!ctor1_called && !ctor2_called && dtor1_called);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?