On 21 Nov 2008, at 21:53, William Newbery wrote:

I want add attributes to my c++ classes that can be used from python. I know ive got to use the getattr method, however my implementation crashes on the second access with an error about a negative reference count.

    virtual Py::Object getattr(const char *name)
    {
        if(std::string("cls2")==name)return Py::asObject(cls2);
        else return getattr_methods(name);
    }


asObject takes ownership of cls2. And when the ref count drops to 0 cls2 is deleted.
You then pass a pointer to a deleted object ot asObject as get a crash.

I suggest that you keep cls2 is a Py::Object so that you keep a ref count of 1 so long as Cls() exists.

I added std::cout to the c'tor and d'tor of your objects to prove this was the case.

Barry