तो मैं एक वेक्टर इसलिए की तरह है:एक कच्चे सूचक के साथ एक वेक्टर से std :: unique_ptr को हटाने का सबसे अच्छा तरीका?
std::vector<std::unique_ptr<SomeClass>> myVector;
तो मेरे पास है एक और वेक्टर जो SomeClass
के कच्चे संकेत शामिल हैं:
std::vector<SomeClass*> myOtherVector;
अगर वहाँ myOtherVector
अंदर एक तत्व यह भी myVector
अंदर हो जाएगा, इसलिए मैं प्रत्येक तत्व को myOtherVector
में जाना चाहता हूं और myVector
से उसी तत्व को हटा देना चाहता हूं। फिर वेक्टर को साफ़ करें।
for(size_t i = 0; i < myOtherVector.size(); i++)
{
myVector.erase(std::remove(myVector.begin(), myVector.end(), myOtherVector[i]), myVector.end());
}
myOtherVector.clear();
यह एक संकलन समय त्रुटि पैदा करता है क्योंकि myVector
अद्वितीय संकेत रखती है, लेकिन मैं remove()
समारोह एक कच्चे सूचक दे रहा हूँ: यह है कि मैं क्या के साथ आया है। यह वह जगह है जहां मुझे सहायता चाहिए क्योंकि मुझे नहीं पता कि इस समस्या को हल करने का उचित तरीका क्या होगा।
myVector.erase(std::remove(myVector.begin(), myVector.end(), std::unique_ptr<SomeClass>(myOtherVector[i])), myVector.end());
Frist क्योंकि अब मैं एक ही वस्तु को संदर्भित दो std::unique_ptr
रों है वह सही नहीं है: मैं करने के लिए लाइन बदल दिया है। myVector
के अंदर तत्व एक संदर्भ है और उपरोक्त रेखा में अद्वितीय सूचक का निर्माण एक और संदर्भ है। और मुझे यह भी पता नहीं है कि एक ही प्रकार प्राप्त करने के लिए एक नया सूचक बनाने का संकल्पनात्मक रूप से ऐसा करने का सही तरीका है। तो फिर मैं साझा संकेत के लिए अद्वितीय संकेत बदल दिया है: "। ApplicationName.exe एक ब्रेकपाइंट शुरू हो गया है"
std::vector<std::shared_ptr<SomeClass>> myVector;
std::vector<SomeClass*> myOtherVector;
for(size_t i = 0; i < myOtherVector.size(); i++)
{
myVector.erase(std::remove(myVector.begin(), myVector.end(), std::shared_ptr<SomeClass>(myOtherVector[i])), myVector.end());
}
myOtherVector.clear();
जब मैं आवेदन myVector.erase()
लाइन एक रनटाइम त्रुटि जिसमें कहा गया में हुई भागा जारी रखने पर क्लिक करने पर मुझे डीबग दावा विफलता मिली।
तो जाहिर है कि मैं कुछ गलत कर रहा हूं, लेकिन मुझे नहीं पता कि क्या। कच्चे सूचक के साथ वेक्टर से स्मार्ट पॉइंटर मिटाने का सही तरीका क्या है?
आप पर विचार किया है से निर्दिष्ट करने के लिए) की आवश्यकता होगी? –
'std :: unique_ptr' में' get' सदस्य है जो स्वामित्व वाले पॉइंटर को लौटाता है। –
उह, एक सुझाव। 'Std :: shared_ptr' नामक एक और सी ++ 11 स्मार्ट पॉइंटर है। –