2 कक्षाएं, एक है और बी बी एCython और सी ++ विरासत
//C++
class A
{
public:
int getA() {return this->a;};
A() {this->a = 42;}
private:
int a;
};
class B: public A
{
public:
B() {this->b = 111;};
int getB() {return this->b;};
private:
int b;
};
अब मैं Cython उपयोग करने वालों के दो वर्गों इंटरफेस और संभावना Geta कॉल करने के लिए करना चाहते हैं() विधि से विरासत
a = PyA()
b = PyB()
assert a.getA() == b.getA()
वर्तमान में मेरी सिक्कों के नमूने रखने का बक्स फ़ाइल इस तरह दिखता है:
cdef extern from "Inherit.h" :
cdef cppclass A:
int getA()
cdef cppclass B(A):
int getB()
cdef class PyA:
cdef A* thisptr
def __cinit__(self):
print "in A: allocating thisptr"
self.thisptr = new A()
def __dealloc__(self):
if self.thisptr:
print "in A: deallocating thisptr"
del self.thisptr
def getA(self):
return self.thisptr.getA()
cdef class PyB(PyA):
def __cinit__(self):
if self.thisptr:
print "in B: deallocating old A"
del self.thisptr
print "in B: creating new b"
self.thisptr = new B()
def __dealloc__(self):
if self.thisptr:
print "in B: deallocating thisptr"
del self.thisptr
self.thisptr = <A*>0
def getB(self):
return (<B*>self.thisptr).getB()
मुझे आशा है कि एक ओर जहां यह कोड n है एक बी उदाहरण से कुछ भी खतरनाक कर रहा हूं, मुझे उम्मीद है कि इसे संभालने का एक बेहतर तरीका है।
इसके अलावा मॉड्यूल का उपयोग कर निम्न उत्पादन उत्पन्न करता है:
>>> from inherit import *
>>> b = PyB()
in A: allocating thisptr
in B: deallocating old A
in B: creating new b
>>> b.getA()
42
>>> b.getB()
111
>>> del b
in B: deallocating thisptr
और मैं वास्तव में सिर्फ यह तुरंत बाद मुक्त करने के लिए एक एक उदाहरण हिस्सा आवंटित करना नहीं है।
इसे सही तरीके से कैसे करें इसके बारे में कोई सलाह?
अच्छी तरह से, एक इनाम खोलने के द्वारा, मैं एक मुहावरेदार निर्माण के लिए देख रहा था इस मामले के लिए। आप कहते हैं कि आप अजगर और Cython पता नहीं है। यदि आपका जवाब कानूनी अजगर (और Cython) कोड होने के लिए अनुकूलित किया जा सकता है, इस अजगर उपयोगकर्ता दुभाषिया है, जो मेरी राय है दुर्घटना शक्ति देना होगा स्मृति आवंटन बर्बाद कर से भी बदतर। – ascobol
आप मेरे जबाब एक टिप्पणी के लिए बहुत लंबा है, कृपया मेरी पोस्ट के उत्तरार्ध में देखते हैं। –
क) मुझे लगता है कि वहाँ केवल Cython में एक निर्माता, हो सकता है अजगर के रूप में। ख) तो हर विधि में हम एक सही आरंभीकरण ... ग) शायद इस सी मॉड्यूल में एक मनमाना पूर्व निर्धारित मूल्य के साथ संभव है के लिए जाँच करने की आवश्यकता होगी। पीईए __ cinit__ में हम इस गैर-तुच्छ मूल्य के साथ एक अतिरिक्त तर्क की जांच करेंगे जो आवंटन को बाईपास करेगा। इस मामले में कोई उपयोगकर्ता "दुर्घटना से" दुभाषिया को दुर्घटनाग्रस्त नहीं कर सकता है। – ascobol