2010-10-10 17 views
5

मैंसी में MalloC++ निर्माता


    class A{ 
    A{ 
    x = ippiMalloc(); 
    if(x==NULL) ... 
    } 
    } 

निर्माता malloc समारोह (इंटेल संस्करण) में सी ++ वर्ग निर्माता (इंटेल पुस्तकालय) से कुछ सी कोड के साथ इंटरफेस के लिए किया जाता है। यदि ippiMalloc फ़ंक्शन सफल नहीं होता है तो इसे संभालने का सही तरीका क्या है। अपवाद फेंको?

+0

यह कौन सी लाइब्रेरी है? – rkellerm

+0

आईपीपीआई (एकीकृत प्रदर्शन प्राइमेटिव्स) – Ross

+1

चेतावनी अगर आप इसके लिए नए हैं: यदि आपके पास स्वामित्व वाले अर्थशास्त्र के साथ कोई तृतीय-पक्ष स्मार्ट पॉइंटर उपलब्ध है, तो शायद 'shared_ptr', तो कच्चे सूचक के स्थान पर इसका उपयोग करें। अन्यथा, ए को आवंटन और 'x' को मुक्त करने के लिए समर्पित कक्षा होना चाहिए। यह केवल हवादार परी नहीं है "चिंताओं का अलगाव अच्छा अभ्यास है": यह एक अपवाद-सुरक्षित वर्ग लिखने के लिए आश्चर्यजनक रूप से अजीब है जो एक से अधिक संसाधनों के प्रबंधन के लिए ज़िम्मेदार है, और थोड़ा सा भी ... –

उत्तर

8

हां, यहां एक त्रुटि अपवाद को संभालने का सबसे उचित तरीका होगा - कम से कम यह सबसे साफ तरीका होगा। यह भी "नया" ऑपरेटर विफलता पर क्या करेगा।

यदि आपके ऐप को कोई समस्या नहीं है तो अपवाद नहीं है। इस मामले में कक्षा पर एक फैक्ट्री विधि समझ में आ सकती है।

static A * create() { ... } 

यहां आप इसे एक गैर-अपवाद प्रोग्राम में लपेट सकते हैं, यदि आप ऑब्जेक्ट नहीं बना सकते हैं तो संभवतः शून्य वापस लौटा सकते हैं।

+0

फिर फिर, यदि आपका ऐप वापस नहीं आ रहा है-शून्य जागरूक है, तो आपने उन्हें हटाने के बजाय समस्याओं को पेश किया है। – MSalters

+0

यदि आपका ऐप अपवाद नहीं है तो यह वापसी मूल्यों की जांच/होना चाहिए। आपके पास वास्तव में कोई दूसरा विकल्प नहीं है: अपवाद और/या वापसी मान। –

4

सबसे पहले, कन्स्ट्रक्टर को ब्रांड्स जोड़ें :) और हाँ, मैं अपवाद फेंकने के लिए वोट दूंगा, क्योंकि विकल्प बहुत सुखद नहीं हैं, जैसे object_state_is_not मान्य या कुछ जैसी कक्षा में कुछ बूल सेट करना।

1

पिछले उत्तरों में शामिल होना - और here कन्स्ट्रक्टरों में त्रुटि प्रबंधन का सबसे अच्छा तरीका अपवाद क्यों है, इस बारे में एक अच्छी व्याख्या है। (सी ++ एफएक्यू लाइट)

संबंधित मुद्दे