1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
delegate void FooFunc ();
[CCode (has_target = false)]
delegate void FooFuncTargetless ();
class Foo : Object {
public Foo () {
baz (func);
assert (ref_count == 1);
bar (func);
assert (ref_count == 1);
baz ((FooFunc) func);
assert (ref_count == 1);
bar ((FooFunc) func);
assert (ref_count == 1);
man ((FooFuncTargetless) func);
assert (ref_count == 1);
maz ((FooFuncTargetless) func);
assert (ref_count == 1);
}
public void func () {
}
void baz (FooFunc f) {
assert (ref_count == 1);
}
void bar (owned FooFunc f) {
assert (ref_count == 2);
}
void man (FooFuncTargetless f) {
assert (ref_count == 1);
}
void maz (owned FooFuncTargetless f) {
assert (ref_count == 1);
}
}
void func () {
}
void main () {
var foo = new Foo ();
assert (foo.ref_count == 1);
FooFunc f0 = foo.func;
assert (foo.ref_count == 2);
f0 = null;
assert (foo.ref_count == 1);
var f1 = (FooFunc) foo.func;
assert (foo.ref_count == 2);
f1 = null;
assert (foo.ref_count == 1);
unowned FooFunc f2 = foo.func;
assert (foo.ref_count == 1);
f2 = null;
assert (foo.ref_count == 1);
unowned FooFunc f3 = (FooFunc) foo.func;
assert (foo.ref_count == 1);
f3 = null;
assert (foo.ref_count == 1);
var f4 = (FooFuncTargetless) foo.func;
assert (foo.ref_count == 1);
f4 = null;
assert (foo.ref_count == 1);
FooFuncTargetless f5 = func;
f5 = null;
var f6 = (FooFuncTargetless) func;
f6 = null;
unowned FooFuncTargetless f7 = func;
f7 = null;
unowned FooFuncTargetless f8 = (FooFuncTargetless) func;
f8 = null;
}
|