ভাগ করা মালিকানা:
দ্য 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();
একটি সম্ভাব্য রেসের শর্ত।