%module disown %{ #include %} #pragma SWIG nowarn=SWIGWARN_TYPEMAP_APPLY_UNDEF %apply SWIGTYPE *DISOWN { A *disown }; %inline { struct A { ~A() { // std::cout <<"delete A" << std::endl; } }; class B { A *_a; public: B() : _a(0) { } ~B() { if (_a) { // std::cout <<"delete A from B" << std::endl; delete _a; } // std::cout <<"delete B" << std::endl; } int acquire(A *disown) { // std::cout <<"acquire A" << std::endl; _a = disown; return 5; } int remove(A *remove) { delete remove; return 5; } }; }