Dag Sverre Seljebotn wrote:
> Robert Bradshaw wrote:
>> On May 6, 2009, at 5:33 AM, Dag Sverre Seljebotn wrote:
>>
>>> Robert Bradshaw wrote:
>>>> What about
>>>>
>>>> cdef CppObject a, b
>>>> a = bar
>>>> b = bar
>>>> del a
>>>> del b
>>>>
>>>> ?
>>> Actually this *can* be supported by overloading operator new.
>>>
>>> I'll change the example to
>>>
>>> cdef CppObject a, b
>>> a = CppObject(3)
>>> b = CppObject(4)
>>> del a
>>> del b
>>>
>>> to avoid an unrelated and orthogonal issue with operator=. Then you
>>> can do:
>>>
>>> struct {} CythonOperators;
>>>
>>> void* operator new(size_t bytes, char* arg, CythonOperators foo) {
>>> return arg; }
>>> void operator delete(void* arg, CythonOperators foo) {/*noop*/}
>>>
>>> void f() {
>>> char a[sizeof(CppObject)];
>>> char b[sizeof(CppObject)];
>>>
>>> new(a, CythonOperators) CppObject(3);
>>> new(b, CythonOperators) CppObject(4);
>>>
>>> delete(CythonOperators) a;
>>> delete(CythonOperators) b;
>>> }
>>>
>>> And /yes/, this is real C++ code... *sigh* :-) (though I'm not sure
>>> if I
>>> got the details 100% right).
>> Actually, the new operator already supports passing in an address to
>> be used for memory, but I wasn't sure enough of how it worked to
>> bring it up. There's an issue of alignment as well.
>
> Hmm. Interesting. Looked it up properly and tried it out, attaching for
> any future reference (though I suppose stack allocation is far down the
> line and after heap then).
/Honestly/...
This time without changing any variables names while in email mode...
#include <iostream>
#include <new>
using namespace std;
class CppObject {
int data;
public:
CppObject(int d) : data(d) {
cout << data << " construct" << endl;
}
~CppObject() {
cout << data << " destruct" << endl;
}
};
int main () {
void* __pyx_mem_myvar[(sizeof(CppObject) / sizeof(void*))+1];
CppObject& __pyx_v_myvar = *(CppObject*)__pyx_mem_myvar;
new(__pyx_mem_myvar) CppObject(4);
// use __pyx_v_myvar as normal CppObject on stack
__pyx_v_myvar.~CppObject();
cout << "done" << endl;
}
--
Dag Sverre
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev