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

Simon W simwarg at gmail.com
Tue Oct 26 23:29:03 CEST 2010


Of course, I did find another reference that I didn't notice. Python
reference works as expected .. hehe!

On Mon, Oct 25, 2010 at 7:35 PM, Simon W <simwarg at gmail.com> wrote:

> 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/20101026/98359495/attachment.html>


More information about the Cplusplus-sig mailing list