ময়লা আবর্জনা সংগ্রহের মূল অর্থ হ'ল আপনার বরাদ্দ হওয়া বস্তুগুলি আর পৌঁছনো না হওয়ার পরে কিছু সময় স্বয়ংক্রিয়ভাবে মুক্তি পাবে।
আরও সঠিকভাবে, যখন তারা প্রোগ্রামটির জন্য অ্যাক্সেসযোগ্য হয় তখন এগুলি ছেড়ে দেওয়া হয় , কারণ বিজ্ঞপ্তিযুক্ত রেফারেন্সযুক্ত বস্তুগুলি অন্যথায় কখনও মুক্তি পায় না।
স্মার্ট পয়েন্টারগুলি কেবল এমন কোনও কাঠামোর উল্লেখ করে যা সাধারণ পয়েন্টারের মতো আচরণ করে তবে এতে কিছু অতিরিক্ত কার্যকারিতা যুক্ত থাকে। এর মধ্যে অন্তর্ভুক্ত রয়েছে তবে অবনমন সীমাবদ্ধ নয়, পাশাপাশি অনুলিপি-অনুলিপি, আবদ্ধ চেক, ...
এখন, যেমন আপনি বলেছেন, স্মার্ট পয়েন্টারগুলি আবর্জনা সংগ্রহের একধরণের প্রয়োগ করতে ব্যবহার করা যেতে পারে ।
তবে চিন্তার ট্রেনটি নিম্নলিখিত পথে চলেছে:
- আবর্জনা সংগ্রহ করা একটি দুর্দান্ত জিনিস, কারণ এটি সুবিধাজনক এবং আমাকে কম জিনিসগুলির যত্ন নিতে হবে
- সুতরাং: আমি আমার ভাষায় আবর্জনা সংগ্রহ করতে চাই
- এখন, কীভাবে আমার ভাষায় জিসি পাবেন?
অবশ্যই, আপনি এটি শুরু থেকে এটি ডিজাইন করতে পারেন। সি # টি আবর্জনা সংগ্রহ করার জন্য তৈরি করা হয়েছিল, সুতরাং কেবলমাত্র new
আপনার অবজেক্ট এবং রেফারেন্সগুলি সুযোগের বাইরে চলে গেলে এটি প্রকাশিত হবে। এটি কীভাবে করা হয় তা সংকলক পর্যন্ত।
তবে সি ++ তে কোনও জঞ্জাল সংগ্রহের উদ্দেশ্য ছিল না। যদি আমরা কিছু পয়েন্টার বরাদ্দ করি int* p = new int;
এবং এটি সুযোগের বাইরে চলে p
যায় তবে নিজেই স্ট্যাক থেকে সরানো হয়, তবে কেউ বরাদ্দ মেমরির যত্ন নেয় না।
এখন আপনার শুরু থেকে একমাত্র জিনিস হ'ল ডিস্ট্রিমেন্টিক ডেস্ট্রাক্টর । যখন কোনও বস্তু এটি তৈরি করা সুযোগ ছেড়ে যায়, তখন তার ধ্বংসকারীকে ডাকা হয়। টেমপ্লেট এবং অপারেটর ওভারলোডিংয়ের সাথে একত্রে আপনি একটি মোড়কের মতো নকশা তৈরি করতে পারেন যা পয়েন্টারের মতো আচরণ করে তবে এটি সংযুক্ত সংস্থানগুলি (আরএআইআই) পরিষ্কার করার জন্য ডেস্ট্রাক্টর কার্যকারিতা ব্যবহার করে। আপনি এটিকে স্মার্ট পয়েন্টার বলছেন ।
এটি সমস্ত উচ্চতর সি ++ নির্দিষ্ট: অপারেটর ওভারলোডিং, টেম্পলেটগুলি, ধ্বংসকারীগণ, ... এই নির্দিষ্ট ভাষার পরিস্থিতিতে, আপনার পছন্দসই জিসি সরবরাহ করতে আপনি স্মার্ট পয়েন্টারগুলি বিকাশ করেছেন।
তবে আপনি যদি শুরু থেকে জিসির সাথে কোনও ভাষা ডিজাইন করেন তবে এটি কেবল একটি বাস্তবায়ন বিশদ। আপনি কেবল বলেছেন যে অবজেক্টটি পরিষ্কার হয়ে যাবে এবং সংকলকটি এটি আপনার জন্য করবে।
সি ++ এর মতো স্মার্ট পয়েন্টার সম্ভবত সি # এর মতো ভাষাগুলিতেও সম্ভব হবে না, যার বিন্দুমাত্র বিনষ্ট নেই (সি # .Dispose()
নির্দিষ্ট বস্তুগুলিকে কল করার জন্য সিনট্যাকটিক চিনি সরবরাহ করে এটি ঘিরে কাজ করে)। অবাস্তবিক উত্সগুলি শেষ পর্যন্ত জিসি দ্বারা পুনরুদ্ধার করা হবে, তবে ঠিক কখন এটি ঘটবে তা অপরিবর্তিত।
এবং এর ফলে, জিসি আরও কার্যকরভাবে এর কাজ করতে দেয়। যা এটি উপরে নির্ধারণ করা হয় স্মার্ট পয়েন্টার চেয়ে ভাষা, .NET জিসি যেমন মেমরি অপারেশন বিলম্ব এবং তাদের সস্তা করতে বা এমনকি ব্লক তাদের সম্পাদন করতে পারবেন গভীরে নির্মিত হচ্ছে সরাতে কত ঘন ঘন বস্তুর উপর ভিত্তি করে বৃদ্ধি দক্ষতা জন্য প্রায় মেমরির অ্যাক্সেস করা হয়।