boost::shared_ptr
एक असामान्य निर्माताबूस्ट के shared_ptr (shared_ptr <Y> कॉन्स एंड आर, टी * पी) के लिए क्या उपयोग किया जाता है?
template<class Y> shared_ptr(shared_ptr<Y> const & r, T * p);
है और मैं इस के लिए उपयोगी होगा क्या करने के लिए के रूप में एक छोटे से हैरान हूँ। असल में यह r
के साथ स्वामित्व साझा करता है, लेकिन .get()
p
वापस करेगा। r.get()
!
इसका मतलब है आप कुछ इस तरह कर सकते हैं:
int main() {
boost::shared_ptr<int> x(new int);
boost::shared_ptr<int> y(x, new int);
std::cout << x.get() << std::endl;
std::cout << y.get() << std::endl;
std::cout << x.use_count() << std::endl;
std::cout << y.use_count() << std::endl;
}
और तुम मिल जाएगा इस:
0x8c66008
0x8c66030
2
2
ध्यान दें कि संकेत अलग हैं, लेकिन वे दोनों 2 के एक use_count
का दावा (चूंकि वे एक ही वस्तु के स्वामित्व साझा करते हैं)।
तो, int
x
के स्वामित्व में उपलब्ध नहीं होगा जब तक x
रूप याy
के आसपास है। और यदि मैं दस्तावेज़ों को सही समझता हूं, तो दूसरा int
कभी विनाश नहीं होता है। मैं निम्नलिखित परीक्षण कार्यक्रम के साथ इस की पुष्टि की है:
struct T {
T() { std::cout << "T()" << std::endl; }
~T() { std::cout << "~T()" << std::endl; }
};
int main() {
boost::shared_ptr<T> x(new T);
boost::shared_ptr<T> y(x, new T);
std::cout << x.get() << std::endl;
std::cout << y.get() << std::endl;
std::cout << x.use_count() << std::endl;
std::cout << y.use_count() << std::endl;
}
यह outputs (अपेक्षित रूप से):
T()
T()
0x96c2008
0x96c2030
2
2
~T()
तो ... क्या यह असामान्य निर्माण की उपयोगिता जो एक सूचक के स्वामित्व के शेयरों है , लेकिन का उपयोग करते समय एक और सूचक (जो इसका स्वामित्व नहीं है) की तरह कार्य करता है।
अच्छा प्रश्न है। +1 – GManNickG
टी एल; डॉ संस्करण: यह 'r' की एक उप-वस्तु के लिए एक सूचक बनाता है। –