#include #include #include class OldNormalNonGcClass { public: OldNormalNonGcClass() { std::cerr << "OldNormalNonGcClass created" << std::endl; } ~OldNormalNonGcClass() { std::cerr << "OldNormalNonGcClass destroyed" << std::endl; } }; class TestClass : public gc_cleanup { OldNormalNonGcClass *field; public: TestClass() : field(new OldNormalNonGcClass) { // ^^^^^^^^^^^^^^^^^^^^^^^ // normal new -- will create non-collectable object std::cerr << "TestClass created" << std::endl; } ~TestClass() { delete field; std::cerr << "TestClass destroyed" << std::endl; } }; main() { TestClass *ptr; ptr = new TestClass; // ^^^^^^^^^^^^^ // GC new -- will create collectable object GC_finalize_all(); // Explicitly finalize all non-GC objects (usually it's not needed: OS will // free all used memory anyway) }