ভাগ করা মালিকানা:
দ্য shared_ptrএবং weak_ptrমান গৃহীত প্রায় কাছাকাছি তাদের মতই বুস্ট প্রতিরূপ । আপনার যখন কোনও সংস্থান ভাগ করার দরকার হয় তখন সেগুলি ব্যবহার করুন এবং জানেন না কোনটি বেঁচে থাকতে শেষ হবে। weak_ptrভাগ করে নেওয়া রিসোর্সটিকে তার জীবদ্দশায় প্রভাবিত না করে পর্যবেক্ষণ করতে ব্যবহার করুন , চক্র বিরতি না দিয়ে। চক্রগুলি shared_ptrসাধারণত ঘটে না - দুটি সংস্থান একে অপরের মালিক হতে পারে না।
নোট করুন যে বুস্ট অতিরিক্তভাবে অফার করে shared_array, এটির জন্য উপযুক্ত বিকল্প হতে পারে shared_ptr<std::vector<T> const>।
এরপরে, বুস্ট অফারগুলি হ'ল intrusive_ptrএটি একটি হালকা ওজনের সমাধান, যদি আপনার সংস্থানটি ইতিমধ্যে রেফারেন্স-গণনা করা ম্যানেজমেন্ট সরবরাহ করে এবং আপনি এটি আরএআইআই নীতিতে গ্রহণ করতে চান। এই এক মানক দ্বারা গ্রহণ করা হয়নি।
স্বতন্ত্র মালিকানা:
বুস্টের scoped_ptrএকটিও রয়েছে , যা অনুলিপিযোগ্য নয় এবং যার জন্য আপনি কোনও মুছক নির্দিষ্ট করতে পারবেন না। std::unique_ptrহয় boost::scoped_ptrস্টেরয়েড উপর এবং আপনার হওয়া উচিত ডিফল্ট পছন্দ যখন আপনি একটি স্মার্ট পয়েন্টার প্রয়োজন । এটা আপনি তার টেমপ্লেট আর্গুমেন্ট একটি deleter নির্দিষ্ট করার অনুমতি দেয় এবং অস্থাবর , অসদৃশ boost::scoped_ptr। এটি এসটিএল পাত্রে যতক্ষণ না আপনি কপিরাইটযোগ্য ধরণের (স্পষ্টতই) প্রয়োজন এমন অপারেশন ব্যবহার করবেন না ততক্ষণ এটি সম্পূর্ণরূপে ব্যবহারযোগ্য।
আবার নোট করুন, বুস্টের একটি অ্যারে সংস্করণ রয়েছে: scoped_arrayমানকটি std::unique_ptr<T[]>আংশিক বিশেষায়নের প্রয়োজনের দ্বারা একীভূত হয়েছে যা এটির delete[]পরিবর্তে পয়েন্টারটি delete( default_deleteআর) দিয়ে দেবে। std::unique_ptr<T[]>এছাড়াও উপলব্ধ করা হয় operator[]পরিবর্তে operator*এবং operator->।
নোট করুন যে std::auto_ptrএখনও মান আছে, কিন্তু এটি অবচয় হয় ।
§D.10 [depr.auto.ptr]
শ্রেণীর টেম্পলেটটি auto_ptrঅবচয় করা হয়েছে। [ দ্রষ্টব্য: শ্রেণীর টেম্পলেট unique_ptr(20.7.1) আরও ভাল সমাধান সরবরাহ করে। অন্তর্ভুক্ত নোট ]
কোনও মালিকানা নেই:
বোবা পয়েন্টার (কাঁচা পয়েন্টার) বা সংস্থাগুলির স্বত্বাধিকারী রেফারেন্সগুলির জন্য উল্লেখগুলি ব্যবহার করুন এবং আপনি যখন জানবেন যে সংস্থানটি রেফারেন্সিং অবজেক্ট / সুযোগকে ছাড়িয়ে যাবে। রেফারেন্সগুলি পছন্দ করুন এবং কাঁচা পয়েন্টার ব্যবহার করুন যখন আপনার প্রয়োজন হয় অযোগ্যতা বা পুনর্নির্মাণযোগ্যতা।
আপনি যদি কোনও সংস্থার অ-মালিকানাধীন রেফারেন্স চান তবে আপনি জানেন না যে সংস্থানটি যে রেফারেন্সটির উল্লেখ রেখেছে সেটিকে আউটলাইভ করবে কিনা, রিসোর্সটি একটিতে প্যাক করুন shared_ptrএবং ব্যবহার করুন weak_ptr- আপনি পিতা-মাতা shared_ptrবেঁচে আছেন কিনা তা পরীক্ষা করতে পারবেন lock, যা হবে shared_ptrযদি রিসোর্সটি এখনও বিদ্যমান থাকে তবে এটি অ-শূন্য হয় return যদি উত্সটি মারা গেছে কিনা তা পরীক্ষা করতে চান, ব্যবহার করুন expired। দুটি একইরকম শোনাতে পারে তবে একই সাথে একযোগে কার্যকর করার ক্ষেত্রে খুব আলাদা, কারণ expiredকেবলমাত্র একক বিবৃতিতে তার ফেরতের মূল্যের গ্যারান্টি রয়েছে। একটি আপাতদৃষ্টিতে নিষ্পাপ পরীক্ষা
if(!wptr.expired())
something_assuming_the_resource_is_still_alive();
একটি সম্ভাব্য রেসের শর্ত।