[C++-sig] Reference count on class object and import()

Simon W simwarg at gmail.com
Mon Oct 25 19:35:24 CEST 2010


Hey again,

I'm trying to implement a load / unload module functionallity. When I delete
the module in the __main__ dict the module's reference count is still > 1.
I've been trying to find if I reference it anywhere else in my code but I
can't find anything! When I did a check in vc++ debugger found something.
When I run this code:

object obj = import(name.c_str());

*obj*'s *ob_refcnt* member is 2 when I check in the vc++ debugger. Shouldn't
it be 1?

After that line, I put it in the __main__ dict like:

mMainNamespace[ name.c_str() ] = obj;

The reference count shows 4, as expected.

When I'm entering my unload() function when I want to remove the module I do
like:
void unload()
{
    object t = mMainNamespace[ name.c_str() ];
    // reference count in t is now 4 ?

     mMainNamespace[ name.c_str() ].del(); // I delete but it's not unloaded
properly because it's still referenced somewhere ..
}

What does import() do? It must save some reference somewhere?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20101025/3dcbc748/attachment.html>


More information about the Cplusplus-sig mailing list