[संपादित करें 1 - जोड़ा तीसरे सूचक वाक्य रचना (धन्यवाद एलेक्स)]सी ++ दाल - वापसी संदर्भ या संदर्भ में पारित पॉप्युलेट
कौनसी विधि और क्यों के बाहर एक दाल के लिए पसंद करेंगे:
Car& DAL::loadCar(int id) {}
bool DAL::loadCar(int id, Car& car) {}
Car* DAL::loadCar(int id) {}
यदि कार को खोजने में असमर्थ पहली विधि शून्य हो जाती है, तो दूसरी विधि झूठी होती है।
दूसरी विधि ढेर पर एक कार वस्तु उत्पन्न करेगी और डेटाबेस से पूछे गए डेटा के साथ पॉप्युलेट करेगी। मुमकिन है (मेरी सी ++ बहुत जंग लगी है) कि की तर्ज पर कोड का मतलब होगा:
Car& DAL::loadCar(int id)
{
Car *carPtr = new Car();
Car &car= *carPtr;
car.setModel(/* value from database */);
car.setEngineSize(/* value from database */);
// etc
return car;
}
धन्यवाद
धन्यवाद। यहां तक कि अगर कॉलर ने लिखा "कार और MyCar = dal.loadCar (आईडी)" सूचक खो जाएगा नहीं? क्या डीएएल द्वारा बनाई गई मेमोरी को हटाने के लिए गैर डीएएल कोड के लिए वैसे भी है? – ng5000
नहीं, अगर कॉलर ने लिखा है कि आपने अभी लिखा है कि स्मृति "मुक्त" हो सकती है। ऐसा करने के लिए आपको "&myCar; हटाएं" कॉल करना होगा .. जो बहुत अजीब लग रहा है। – Goz
स्टैक कॉपी भी नहीं हो सकती है: कंपाइलर और अनुकूलन के आधार पर, (एन) आरवीओ किक कर सकता है और ऑपरेशन को # 1 के बराबर बना सकता है। किसी भी मामले में, जब कार नहीं मिलती है तो अपवाद फेंकना आवश्यक होगा। –