Listing 5: Class template Boehmable
// $Id$
#include <gc_cpp.h>
#include <list>
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::list;
using std::string;
long constructors = 0;
long destructors = 0;
template<class Super>
class Boehmable : public Super, public virtual gc_cleanup {
public:
// Don't need any member functions. We inherit the
// interfaces from Super and gc_cleanup.
Boehmable () : Super (), gc_cleanup () { ++constructors; }
virtual ~Boehmable () { ++destructors; }
};
int
main ()
{
for (long i = 0; i < 10000; ++i) {
list<int> *lst = new Boehmable< list<int> >;
for (int j = 0; j < 1000; ++j) {
lst->push_front (j);
}
list<string *> *strlst = new Boehmable< list<string *> >;
for (int k = 0; k < 1000; ++k) {
strlst->push_front (new Boehmable<string>);
}
}
cout << "constructors " << constructors << ", destructors "
<< destructors << endl;
return 0;
}