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