2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Smart Pointer इति C++ इत्यस्मिन् एकं साधनं यस्य उपयोगः गतिशीलरूपेण आवंटितस्मृतेः स्वयमेव प्रबन्धनार्थं भवति ।
एषः एकः वर्गः अस्ति यः कच्चे सूचकानाम् कार्याणि समाहितं करोति तथा च संसाधनानाम् आवंटनं विमोचनं च स्वयमेव सम्भालितुं शक्नोति, तस्मात् प्रोग्रामर्-जनाः सामान्यस्मृति-प्रबन्धन-दोषान्, यथा स्मृति-लीक-, लम्बमान-सूचकानाम्, अन्य-समस्यानां च परिहाराय सहायकः भवति
स्मार्ट सूचकाः Resource Acquisition Is Initialization (RAII) तन्त्रस्य माध्यमेन कार्यं कुर्वन्ति, यस्य अर्थः अस्ति यत् स्मार्ट सूचकाः संसाधनानाम् अधिग्रहणं कुर्वन्ति यदा तेषां निर्माणं भवति तथा च संसाधनं नष्टं भवति तदा मुक्तं भवति एतेन असामान्यपरिस्थितौ अपि संसाधनानाम् सम्यक् मुक्तिः भवति ।
(1) मेमोरी लीक् : मेमोरी मैन्युअल् रूपेण मुक्तं भवति, परन्तु स्मार्ट पॉइंटर् इत्यस्य उपयोगेन स्वयमेव मुक्तं कर्तुं शक्यते ।
(2) साझास्वामित्वसूचकानाम् प्रसारणं विमोचनं च, यथा यदा बहुविधाः सूत्राः एकमेव वस्तु उपयुज्यन्ते तदा विनाशसमस्याः ।
C++ मानकपुस्तकालयः अनेकप्रकारस्य स्मार्टसूचकाः प्रदाति, यथा-
std::unique_ptr
:
unique_ptr
दृष्टान्तस्य तस्य सूचकस्य वस्तुनः अनन्यस्वामित्वं भवति ।unique_ptr
यदा व्याप्तेः बहिः गच्छति अथवा स्पष्टतया पुनः सेट् भवति तदा स्वयमेव विध्वंसकं आह्वयति, प्रबन्धितं वस्तु च मुक्तं करोति ।std::shared_ptr
:
shared_ptr
उदाहरणानि एकस्यैव वस्तुनः स्वामित्वं साझां कुर्वन्ति ।shared_ptr
मात्रा।shared_ptr
यदा कश्चन दृष्टान्तः व्याप्तेः बहिः गच्छति अथवा पुनः सेट् भवति तदा सन्दर्भगणना शून्यं भवति, वस्तुनः विध्वंसकः आह्वयते, वस्तु च मुक्तः भवति ।std::weak_ptr
:
shared_ptr
परिपत्र सन्दर्भ समस्या।shared_ptr
प्रबन्धितवस्तूनि, परन्तु तस्य जीवनचक्रप्रबन्धने भागं न गृह्णाति ।shared_ptr
यदा दृष्टान्तः वस्तुं दर्शयति तदा ।weak_ptr
वस्तु नष्टम् इति ज्ञातुं शक्नोति।स्मार्ट पॉइंटर् इत्यस्य डिजाइनं उपयोगः च C++ इत्यस्मिन् स्मृतिप्रबन्धनं बहु सरलीकरोति तथा च कार्यक्रमस्य दृढतायां सुरक्षायां च सुधारं करोति । आधुनिक C++ प्रोग्रामिंग् इत्यस्मिन् कोडस्य गुणवत्तां, परिपालनक्षमतां च सुधारयितुम् कच्चा पॉइण्टर् इत्यस्य स्थाने स्मार्ट पॉइंटर् इत्यस्य उपयोगः अत्यन्तं अनुशंसितः अस्ति ।
स्मृति-लीक-आदि-संसाधन-प्रबन्धन-सम्बद्धानां विषयाणां निवारणाय गतिशीलरूपेण आवंटित-स्मृतेः स्वयमेव प्रबन्धनस्य साधनरूपेण C++-मध्ये स्मार्ट-सूचकानाम् उपयोगः भवति
std::unique_ptr
उदाहरणstd::unique_ptr
अनन्यस्वामित्वयुक्तः स्मार्ट-सूचकः अस्ति, यः केवलम् एकः एव अस्ति इति सुनिश्चितं करोतिstd::unique_ptr
दृष्टान्तस्य दत्तसंसाधनस्य नियन्त्रणं भवति ।कदाstd::unique_ptr
यदा व्याप्तेः बहिः गच्छति अथवा पुनः सेट् भवति तदा तस्य स्वामित्वं प्राप्ताः संसाधनाः स्वयमेव मुक्ताः भविष्यन्ति ।
- #include <memory>
-
- class MyClass {
- public:
- MyClass() { std::cout << "MyClass constructor called.n"; }
- ~MyClass() { std::cout << "MyClass destructor called.n"; }
- void doSomething() { std::cout << "Doing something...n"; }
- };
-
- int main() {
- // 创建一个unique_ptr来管理MyClass的实例
- std::unique_ptr<MyClass> uptr(new MyClass());
-
- // 调用doSomething方法
- uptr->doSomething();
-
- // unique_ptr会在离开作用域时自动调用MyClass的析构函数
- return 0;
- }
std::shared_ptr
उदाहरणstd::shared_ptr
एकः साझा-स्वामित्व-स्मार्ट-सूचकः अस्ति यः बहुविधं अनुमतिं ददातिstd::shared_ptr
उदाहरणानि एकस्यैव संसाधनस्य स्वामित्वं साझां कुर्वन्ति ।std::shared_ptr
सन्दर्भगणनायाः उपयोगं कुर्वन्तु यत् कति स्मार्टसूचकाः एकस्मिन् संसाधने सूचयन्ति यदा सन्दर्भगणना 0 भवति तदा संसाधनं मुक्तं भवति ।
- #include <memory>
-
- class MyClass {
- public:
- MyClass() { std::cout << "MyClass constructor called.n"; }
- ~MyClass() { std::cout << "MyClass destructor called.n"; }
- void doSomething() { std::cout << "Doing something...n"; }
- };
-
- int main() {
- // 创建一个shared_ptr来管理MyClass的实例
- std::shared_ptr<MyClass> sptr(new MyClass());
-
- // 创建第二个shared_ptr,共享同一个MyClass实例
- std::shared_ptr<MyClass> sptr2 = sptr;
-
- // 调用doSomething方法
- sptr->doSomething();
-
- // 当所有shared_ptr实例都超出作用域时,MyClass的析构函数才会被调用
- return 0;
- }
प्रयोगेstd::shared_ptr
एतत् कुर्वन् वृत्तसन्दर्भस्थितीनां परिहाराय सावधानाः भवन्तु, येन सन्दर्भगणना कदापि 0 यावत् न पतति, येन संसाधनस्य लीकं भवति ।वृत्तसन्दर्भस्य सन्दर्भे भवन्तः उपयोक्तुं शक्नुवन्तिstd::weak_ptr
चक्रं भङ्गयितुं, २.std::weak_ptr
सन्दर्भगणना न वर्धयति, केवलं धारयतिstd::shared_ptr
संसाधनानाम् दुर्बलसन्दर्भान् प्रबन्धयन्तु।
एते उदाहरणानि दर्शयन्ति यत् गतिशीलरूपेण आवंटितस्मृतेः प्रबन्धनार्थं स्मार्ट-सूचकानाम् उपयोगः कथं करणीयः यत् संसाधनाः समुचितसमये सम्यक् मुक्ताः भवन्ति इति सुनिश्चितं भवति, स्मृतेः हस्तचलितरूपेण प्रबन्धने सति सामान्यदोषाः परिहरन्ति
https://www.cnblogs.com/मृत्यु-देव/पृष्ठ/17962676
https://zhuanlan.zhihu.com/p/678722914