সি ++ সবই মেমরির মালিকানা সম্পর্কিত - ওরফে মালিকানা শব্দার্থক ।
সেই স্মৃতিটি প্রকাশের জন্য গতিশীলভাবে বরাদ্দ হওয়া মেমরির একটি অংশের মালিকের দায়িত্ব। সুতরাং প্রশ্নটি সত্যই হয়ে যায় মেমরিটির মালিক কে।
সি ++ তে মালিকানা নথিযুক্ত যা কোনও কাঁচা পয়েন্টারটি ভিতরে ppedেকে দেওয়া হয় কোনও ভাল (আইএমও) সি ++ প্রোগ্রামে এটি খুব বিরল ( বিরল) কাঁচা পয়েন্টারগুলি প্রায় কাছাকাছি দেখতে , কখনই নয় ) যেমন কাঁচা পয়েন্টারগুলির কোনও অনুমানযুক্ত মালিকানা নেই তাই আমরা পারি কারা মেমোরির মালিক তা বলবেন না এবং এভাবে ডকুমেন্টেশনের যত্ন সহকারে পড়া না করে আপনি বলতে পারবেন না মালিকানার জন্য দায়ী কে)।
বিপরীতভাবে, কাঁচা পয়েন্টারগুলি কোনও শ্রেণিতে সংরক্ষণ করা কাঁচা পয়েন্টারগুলি দেখতে পাওয়া যায় না প্রতিটি কাঁচা পয়েন্টার তার নিজস্ব স্মার্ট পয়েন্টার মোড়কের মধ্যে সংরক্ষণ করা হয়। ( এনবি: যদি আপনার কোনও অবজেক্টের মালিক না থাকে তবে আপনি এটি সংরক্ষণ করবেন না কারণ এটি কখন সুযোগের বাইরে চলে যাবে এবং ধ্বংস হবে তা আপনি জানেন না))
সুতরাং প্রশ্ন:
- লোকেরা কী ধরণের মালিকানা উপস্থাপন করেছে?
- এই শব্দার্থক প্রয়োগ করতে কোন স্ট্যান্ডার্ড ক্লাস ব্যবহার করা হয়?
- কোন পরিস্থিতিতে আপনি তাদের দরকারী মনে করেন?
প্রতি উত্তরে 1 ধরণের অর্থপূর্ণ মালিকানা রাখুন যাতে তাদের আলাদা আলাদাভাবে ভোট দেওয়া যায়।
সারসংক্ষেপ:
ধারণামূলকভাবে, স্মার্ট পয়েন্টারগুলি সহজ এবং একটি নিষ্পাপ বাস্তবায়ন সহজ। আমি অনেকগুলি প্রয়োগের চেষ্টা দেখেছি, তবে অবিচ্ছিন্নভাবে সেগুলি এমনভাবে ভেঙে গেছে যা নৈমিত্তিক ব্যবহার এবং উদাহরণগুলির দ্বারা সুস্পষ্ট নয়। সুতরাং আমি আপনার নিজের রোলিংয়ের চেয়ে লাইব্রেরি থেকে সর্বদা ভালভাবে পরীক্ষিত স্মার্ট পয়েন্টারগুলি ব্যবহার করার পরামর্শ দিই। std::auto_ptr
বা বুস্ট স্মার্ট পয়েন্টারগুলির মধ্যে একটিতে আমার সমস্ত প্রয়োজনীয়তা আবশ্যক।
std::auto_ptr<T>
:
একক ব্যক্তি অবজেক্টের মালিক। মালিকানা হস্তান্তর অনুমোদিত।
ব্যবহার: এটি আপনাকে ইন্টারফেসগুলি সংজ্ঞায়িত করতে দেয় যা স্বত্বের সুস্পষ্ট স্থানান্তর দেখায়।
boost::scoped_ptr<T>
একক ব্যক্তি অবজেক্টের মালিক। মালিকানা হস্তান্তর অনুমোদিত নয়।
ব্যবহার: সুস্পষ্ট মালিকানা দেখানোর জন্য ব্যবহৃত হয়। অবজেক্টটি ডেস্ট্রাক্টর দ্বারা বা স্পষ্টভাবে পুনরায় সেট করার পরে ধ্বংস হয়ে যাবে।
boost::shared_ptr<T>
( std::tr1::shared_ptr<T>
)
একাধিক মালিকানা। এটি একটি সাধারণ রেফারেন্স গণনা পয়েন্টার। রেফারেন্স গণনা শূন্যে পৌঁছে গেলে বস্তুটি ধ্বংস হয়ে যায়।
ব্যবহার: যখন কোনও বস্তুর আজীবন একাধিক owণ থাকতে পারে যা সংকলনের সময় নির্ধারণ করা যায় না।
boost::weak_ptr<T>
:
shared_ptr<T>
পয়েন্টারগুলির একটি চক্র ঘটতে পারে এমন পরিস্থিতিতে ব্যবহৃত হয়।
ব্যবহার: যখন কেবল চক্রটি একটি ভাগ করা পুনরায় হিসাব বজায় রাখে তখন অবৈধ জিনিসগুলি ধরে রাখতে চক্র বন্ধ করতে ব্যবহৃত হয়।
In C++ ownership is documented by the type a RAW pointer is wrapped inside thus in a good (IMO)
এটি কি পুনরায় চাপানো যেতে পারে? আমি মোটেই বুঝতে পারি না।
In C++ ownership is documented by the type a RAW pointer is wrapped inside thus in a good C++ program it is very rare to see RAW pointers passed around
। RAW পয়েন্টারগুলির মালিকানা শব্দার্থবিজ্ঞান নেই। আপনি যদি মালিককে না চেনেন তবে অবজেক্টটি মোছার জন্য দায়ী কে তা আপনি জানেন না here এমন অনেকগুলি মানক শ্রেণি রয়েছে যা পয়েন্টারগুলিকে আবদ্ধ করতে ব্যবহৃত হয় (এসটিডি: শেয়ারড_পিটার, এসটিডি :: অনন্য_পিটার ইত্যাদি) যা মালিকানা নির্ধারণ করে এবং এভাবে নির্দেশক মোছার জন্য দায়ী কে নির্ধারণ করুন।