मैं सोच रहा था क्या इस तरह के एक वर्ग में क्या होगा:एक बहुप्रचारित वातावरण में विनाशक?
class MyClass
{
private:
std::vector<int> iVector;
void Worker()
{
//Lots of stuff done with iVector
//adding, removing elements, etc.
}
}
चलो कहते हैं कि मैं एक धागा (वर्ग के सदस्य कार्यों में से एक द्वारा लाया) iVector उपयोग करता है और उसे संशोधित करता है कि बनाएँ। इस कार्यकर्ता के अलावा, कक्षा के अन्य सदस्य कार्य इस std :: वेक्टर को पढ़ या संशोधित नहीं करते हैं।
सबकुछ ठीक लगता है क्योंकि वर्कर थ्रेड iVector का उपयोग करने वाला एकमात्र है।
लेकिन क्या होगा जब वस्तु का एक उदाहरण नष्ट हो जाए? यहां तक कि यदि कार्यकर्ता धागा समाप्त होने के बाद वस्तु नष्ट हो जाती है, तो iVector के लिए विनाशक मुख्य धागे से आवेदक लगाया जाएगा। क्या इससे अपरिभाषित व्यवहार होगा?
धन्यवाद!
यदि ऑब्जेक्ट का जीवनकाल थ्रेड या ऑब्जेक्ट के किसी भी अन्य उपयोग से लंबा है, तो कोई यूबी नहीं है। –
वैसे, यदि वेक्टर केवल थ्रेड द्वारा उपयोग किया जाता है और कहीं और नहीं, तो थ्रेड के अंदर स्थानीय चर के रूप में क्यों नहीं है? फिर आपको इस तरह की चीजों के बारे में चिंता करने की ज़रूरत नहीं है। –
ऑब्जेक्ट का जीवनकाल अब धागे से नहीं है। लेकिन थ्रेड ए में वेक्टर को नष्ट करना ठीक क्यों है जब इसे थ्रेड बी (वर्कर थ्रेड) में संशोधित किया जाता है? – sapito