स्मार्ट पॉइंटर्स के कंटेनर में कोई आइटम जोड़ने के कई तरीके। मैं सोच रहा हूं कि आप किस तरह से जाएंगे।स्मार्ट पॉइंटर्स के कंटेनर में एक आइटम जोड़ें
class MyContainer
{
private:
std::vector<std::unique_ptr<Item>> mItems;
public:
bool Add(Item* item);
// This is Way 1
//
// Advantages:
// - Easy to add derived items, such as Add(new DerivedItem);
// - No interface change if smart pointer type changes to such as shared_ptr;
//
// Disadvantages:
// - Don't explicitly show the item to add must be allocated on heap;
// - If failed to add, user has to delete the item.
bool Add(std::unique_ptr<Item> item);
// This is Way 2
// Disadvantages and advantages are reversed from Way 1.
// Such as to add derived item, Add(std::unique_ptr<Item>(new DerivedItem));
// |
// easy to write DerivedItem here for an error
bool Add(std::unique_ptr<Item>& item);
// This is Way 3
// Similar to Way 2, but when failed to add, item still exist if it is a
// reference of outer unique_ptr<Item>
};
मैं व्यक्तिगत रूप से रास्ता 2 और 3 या रास्ता 1 का नुकसान के लिए रास्ता 1. किसी भी अधिक लाभ के लिए जाना है कि मैं 2 या 3 के लिए जाना चाहिए?
sftrabbit कई अच्छे अंक देता है। निम्नलिखित सामान्य मामले में। इसे आसानी से करने के लिए वे 2 या 3 का उपयोग कैसे करें? उपयोगकर्ता एक नया व्युत्पन्न आइटम उत्पन्न करने के लिए एक संवाद का उपयोग करता है। इसे std::unique_ptr<DerivedItem> item
पर रखा गया है। 'ओके' बटन पर क्लिक करते समय, इसे कंटेनर में जोड़ा जाता है। यदि जोड़ने में विफल रहा है, तो संपादन के लिए संवाद पर वापस जाएं।
bool Add(std::unique_ptr<Item> item);
कारण::
+1, विशेष रूप से कारण के लिए 2. – us2012
आइए हम एक मामले पर विचार करें। उपयोगकर्ता एक नया व्युत्पन्न आइटम उत्पन्न करने के लिए एक संवाद का उपयोग करता है। इसे 'std :: unique_ptr आइटम' पर रखा गया है। 'ओके' बटन पर क्लिक करते समय, इसे कंटेनर में जोड़ा जाता है। यदि जोड़ने में विफल रहा है, तो संपादन के लिए संवाद पर वापस जाएं। किस तरह से अधिक सुविधाजनक है? धन्यवाद। –
user1899020
@ user1899020 मैं अपने उत्तर के साथ चिपक रहा हूँ। यह वास्तव में आप 'MyContainer' का उपयोग कर रहे हैं के बारे में स्वतंत्र है। मैं बस अनुशंसा करता हूं कि यदि आप 'आइटम' नहीं जोड़ सकते हैं तो आप प्रचार करने के लिए अपवाद की अनुमति देते हैं। यह संभालने के लिए ग्राहक पर निर्भर है। –