Argh! Name collision!

Alf P. Steinbach /Usenet alf.p.steinbach+usenet at gmail.com
Wed Jul 7 22:42:59 EDT 2010


* Alf P. Steinbach /Usenet, on 08.07.2010 01:47:
>
>      enum DoAddRef { doAddRef };
>
>      class Ptr
>      {
>      private:
>          PyObject*   p_;
>
>      public:
>          Ptr( PyObject* p = 0 ): p_( p )
>          {}
>
>          Ptr( PyObject* p, DoAddRef ): p_( p )
>          {
>              assert( p != 0 );
>              Py_INCREF( p_ );
>          }
>
>          Ptr( Ptr const& other ): p_( other.p_ )
>          {
>              Py_XINCREF( p_ );
>          }
>
>          ~Ptr()
>          {
>              Py_XDECREF( p_ );
>          }
>
>          void swapWith( Ptr& other ) { std::swap( p_, other.p_ ); }
>          Ptr& operator=( Ptr other ) { swapWith( other ); return *this; }
>
>          PyObject* get() const       { return p_; }
>
>          PyObject* release()
>          {
>              PyObject* const result  = p_;
>              Py_XDECREF( p_ );

Hark. This Py_XDECREF shouldn't be there, I don't know how it got there. The 
whole point of 'release', with conventional semantics, is to /not/ decrement the 
reference count.


>              p_ = 0;
>              return result;
>          }
>      };


Sorry for posting unfinished code,

- Alf


PS: "pyni" was a good name. But in use! When I thought about adding the "s" as 
disambiguation I thought the pure shock value of that was funny in a way, but 
now it doesn't seem funny. Is "pytes" (Python Extension Support) a good name?

-- 
blog at <url: http://alfps.wordpress.com>



More information about the Python-list mailing list