यह पूरी तरह से सुरक्षित है।
निम्नलिखित कोड नमूना:
#include <iostream>
#include <boost/shared_ptr.hpp>
int main(int, char**)
{
boost::shared_ptr<int> a(new int(5));
boost::shared_ptr<const int> b = a;
std::cout << "a: " << a.use_count() << std::endl;
std::cout << "b: " << b.use_count() << std::endl;
return EXIT_SUCCESS;
}
संकलित करता है तथा ठीक चलाते हैं, और पूरी तरह से सही है। यह आउटपुट:
a: 2
b: 2
दो shared_ptr
समान संदर्भ काउंटर साझा करते हैं।
इसके अलावा
:
#include <iostream>
#include <boost/shared_ptr.hpp>
class A {};
class B : public A {};
int main(int, char**)
{
boost::shared_ptr<A> a(new B());
boost::shared_ptr<B> b = boost::static_pointer_cast<B>(a);
std::cout << "a: " << a.use_count() << std::endl;
std::cout << "b: " << b.use_count() << std::endl;
return EXIT_SUCCESS;
}
उसी तरह व्यवहार करते हैं। हालांकि कभी नहीं इस तरह एक निर्माण का उपयोग कर अपने shared_ptr
निर्माण करना होगा:
boost::shared_ptr<A> a(new B());
boost::shared_ptr<B> b(static_cast<B*>(a.get()));
a.get()
कच्चे सूचक देता है और संदर्भ गिनती के बारे में सभी जानकारी खो देता है। ऐसा करने से, आप दो अलग-अलग (लिंक नहीं) shared_ptr
के साथ समाप्त हो जाएंगे जो एक ही सूचक लेकिन विभिन्न संदर्भ काउंटर का उपयोग करते हैं।
क्या आप बेस/व्युत्पन्न दावे के लिए संदर्भ प्रदान कर सकते हैं? – fredoverflow
http://stackoverflow.com/questions/701456/what-are-potential-dangers-when-using-boostshared-ptr/716112#716112 – lytenyn
आधार/व्युत्पन्न 100% सुरक्षित है। 'Get()' का उपयोग करना असुरक्षित है। बेस के बिना समान स्थिति यहां दी गई है: 'shared_ptr पीआरटी (नया व्युत्पन्न), ptr2 (ptr.get());' - असुरक्षित। –
ybungalobill