[Numpy-discussion] C++ class encapsulating ctypes-numpy array?

Matthieu Brucher matthieu.brucher@gmail....
Thu Mar 20 09:39:20 CDT 2008

2008/3/20, Joris De Ridder <Joris.DeRidder@ster.kuleuven.be>:
> > You can use ctypes if and ony if the C++ object is only used in one
> > function call. You can't for instance create a C++ container with
> > ctypes, then in Python call some method and then delete the
> > container, because ctypes will destroy the data after the C++
> > container was built. This is the only drawback of ctypes.
> I'm not sure I understand. Could you perhaps give a pointer for
> additional info, or an example?

Suppose you have a C++ class :

struct MyClass
  MyClass(float* data, int dim, ...)
  :container(data, dim)

  void method()
    // Modify container
  MyContainer container;

If the MyContainer class wraps the data array without copying it, if in
Python, you wrap it like :

class MyClass:
  def __init__(self, data):
    self._inst = #use a C bridge to create a new MyClass from data

  def method(self):
    wrapMethod(self._inst) #wrapper around method from MyClass

after you create a new Python MyClass, your actual data inside the C++ class
will be freed and thus you have reads or writes errors (and thus can lead to
segmentation faults).

> When it comes to strides, you have to divide them by the size of
> > your data : the stride is counted in bytes and not in short/float/...
> Yep, I did this on the Python side. Thanks for the remark, though.

OK ;)

French PhD student
Website : http://matthieu-brucher.developpez.com/
Blogs : http://matt.eifelle.com and http://blog.developpez.com/?blog=92
LinkedIn : http://www.linkedin.com/in/matthieubrucher
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20080320/783bbdae/attachment.html 

More information about the Numpy-discussion mailing list