मेरे पास एक टेम्पलेटेड क्लास है, मायफू, जो टाइप टी के "सामान" को स्टोर करता है जो जटिल प्रकारों के लिए आदिम या पॉइंटर्स हो सकता है। जब myFoo हटा दिया जाता है, तो मैं संग्रहीत होने वाली हर चीज़ से जुड़ी सभी मेमोरी को रिलीज़ करना चाहता हूं। इसका मतलब है कि मुझे संग्रहित होने वाले प्रत्येक पॉइंटर पर डिलीट कॉल करने की आवश्यकता है, लेकिन मैं आदिम पर कॉलिंग को भी समाप्त कर सकता हूं। क्या यह सुरक्षित है ??क्या मैं प्राइमेटिव्स पर डिलीट कॉल कर सकता हूं?
मैंने आगे बढ़ने के लिए बेहतर तरीके से हाइलाइट करने के लिए नीचे myFoo का एक स्केच शामिल किया है। मुझे यकीन नहीं है कि विनाशक का व्यवहार अच्छी तरह परिभाषित है या नहीं।
template<class T>
class myFoo
{
public:
myFoo(int size)
{
size_ = size;
T* foo = new T[size_];
}
void addFoo(T tmp, int index)
{
foo[index] = tmp;
}
virtual ~myFoo()
{
for(int i=0; i < size_; i++)
{
delete foo[i];
}
delete [] foo;
}
private:
int size_;
T* foo;
}
क्या आप पॉइंटर्स के लिए विशेषज्ञ नहीं हो सकते? – chris
लिखित रूप में, आपका कोड * किसी * प्रकार 'टी' के लिए समझ में नहीं आता है, कम से कम अर्थात्: आप स्वामित्व जिम्मेदारियों को जोड़ रहे हैं, और कक्षा एक उपयोगिता, पठनीयता और रखरखाव दुःस्वप्न होगी। संक्षेप में, यह * आपकी * चिंता नहीं होनी चाहिए जो 'टी' है, और ग्राहक को अपनी सफाई करना चाहिए (या निश्चित रूप से एक स्मार्ट सूचक का उपयोग करना चाहिए)। –
@ केरेकस्क: मैं एक प्रकार का डेटाबेस लिख रहा हूं। मैं इसमें डेटा सम्मिलित करना चाहता हूं। डेटाबेस के लिए यह समझ में आता है कि मैं उस सामान की स्मृति की स्वामित्व लेता हूं जो मैं इसके अंदर संग्रहीत कर रहा हूं। अन्यथा मुझे डेटाबेस से सभी डेटा को बाहरी रूप से प्रबंधित करने की आवश्यकता होगी। यह थोड़ा सा है "wtf ??" यदि आप सुझाव देते हैं तो मैं ऐसा करता हूं। – Daniel