আমরা সম্প্রতি আমার EECS ক্লাসে এই বিষয়টি নিয়েছি। আপনি যদি বক্তৃতার নোটগুলি বিস্তারিতভাবে দেখতে চান তবে দেখুন http://umich.edu/~eecs381/lecture/IdiomsDesPattsCreational.pdf
দুটি উপায় আছে যা আমি একটি সিঙ্গলটন ক্লাসটি সঠিকভাবে তৈরি করতে জানি।
প্রথম উপায়:
আপনার উদাহরণটিতে এটি যেমন রয়েছে তেমনই এটি বাস্তবায়ন করুন। ধ্বংস হিসাবে, "সিঙ্গেলটন সাধারণত প্রোগ্রামটি চালুর দৈর্ঘ্যের জন্য সহ্য করে; কোনও প্রোগ্রাম শেষ হয়ে গেলে বেশিরভাগ ওএস মেমরি এবং অন্যান্য সংস্থানগুলি পুনরুদ্ধার করতে পারে, সুতরাং এই সম্পর্কে উদ্বিগ্ন না হওয়ার পক্ষে যুক্তি রয়েছে" "
তবে প্রোগ্রাম সমাপ্তির সময় পরিষ্কার করা ভাল অনুশীলন। অতএব, আপনি একটি সহায়ক স্ট্যাটিক সিঙ্গলটনডাস্ট্রিক্ট ক্লাসের সাথে এটি করতে পারেন এবং এটি আপনার সিঙ্গেলনে বন্ধু হিসাবে ঘোষণা করতে পারেন।
class Singleton {
public:
static Singleton* get_instance();
// disable copy/move -- this is a Singleton
Singleton(const Singleton&) = delete;
Singleton(Singleton&&) = delete;
Singleton& operator=(const Singleton&) = delete;
Singleton& operator=(Singleton&&) = delete;
friend class Singleton_destroyer;
private:
Singleton(); // no one else can create one
~Singleton(); // prevent accidental deletion
static Singleton* ptr;
};
// auxiliary static object for destroying the memory of Singleton
class Singleton_destroyer {
public:
~Singleton_destroyer { delete Singleton::ptr; }
};
সিঙ্গেলটন_ডেস্ট্রোয়ার প্রোগ্রাম স্টার্টআপে তৈরি করা হবে এবং "প্রোগ্রামটি শেষ হয়ে গেলে সমস্ত গ্লোবাল / স্ট্যাটিক অবজেক্ট রানটাইম লাইব্রেরি শাটডাউন কোড (লিংক দ্বারা সন্নিবেশিত) দ্বারা ধ্বংস করা হয়, তাই_ডেস্ট্রোয়ার ধ্বংস হয়ে যাবে; এর ডেস্ট্রাক্টর সিঙ্গলটন মুছে ফেলবে, এটি চালিয়ে যাবে বিনাশকারী। "
দ্বিতীয় উপায়
এটিকে মিঃ সিঙ্গেলটন বলা হয়, এটি সি ++ উইজার্ড স্কট মায়ার্স দ্বারা নির্মিত। সহজভাবে get_instance () আলাদাভাবে সংজ্ঞায়িত করুন। এখন আপনি পয়েন্টার সদস্য ভেরিয়েবল থেকেও মুক্তি পেতে পারেন।
// public member function
static Singleton& Singleton::get_instance()
{
static Singleton s;
return s;
}
কারণ ফিরে মান রেফারেন্স দ্বারা হয় এবং আপনি ব্যবহার করতে পারেন এই ঝরঝরে .
পরিবর্তে সিনট্যাক্স ->
এক্সেস সদস্য ভেরিয়েবল করতে।
"সংকলক স্বয়ংক্রিয়ভাবে কোড তৈরি করে যা ঘোষণার মাধ্যমে প্রথমবার তৈরি করে, তারপরে নয়, এবং তারপরে প্রোগ্রাম সমাপ্তিতে স্থির বস্তুটিকে মুছে দেয়" "
এটিও নোট করুন যে মায়ার্স সিঙ্গলটনের সাহায্যে আপনি "খুব কঠিন পরিস্থিতিতে পড়তে পারেন যদি সমাপ্তির সময় অবজেক্টগুলি একে অপরের উপর নির্ভর করে - যখন সিঙ্গেলটন অন্যান্য বস্তুর সাথে তুলনামূলকভাবে অদৃশ্য হয়ে যায়? তবে সাধারণ অ্যাপ্লিকেশনগুলির জন্য, এটি দুর্দান্ত কাজ করে।"