| 84 | |
| 85 | |
| 86 | class C: public gc_cleanup, public A {public: |
| 87 | /* A collectable class with cleanup and virtual multiple inheritance. */ |
| 88 | |
| 89 | C( int levelArg ): A( levelArg ), level( levelArg ) { |
| 90 | nAllocated++; |
| 91 | if (level > 0) { |
| 92 | left = new C( level - 1 ); |
| 93 | right = new C( level - 1 );} |
| 94 | else { |
| 95 | left = right = 0;}} |
| 96 | ~C() { |
| 97 | this->A::Test( level ); |
| 98 | nFreed++; |
| 99 | my_assert( level == 0 ? |
| 100 | left == 0 && right == 0 : |
| 101 | level == left->level + 1 && level == right->level + 1 ); |
| 102 | left = right = 0; |
| 103 | level = -123456;} |
| 104 | static void Test() { |
| 105 | my_assert( nFreed <= nAllocated && nFreed >= .8 * nAllocated );} |
| 106 | |
| 107 | static int nFreed; |
| 108 | static int nAllocated; |
| 109 | int level; |
| 110 | C* left; |
| 111 | C* right;}; |
| 112 | |
| 113 | int C::nFreed = 0; |
| 114 | int C::nAllocated = 0; |
nothing calls this directly
no outgoing calls
no test coverage detected