C ++ unique_ptr এর ব্যবহার

Use C Unique_ptr



গতিশীলভাবে সম্পদ বরাদ্দ করতে স্মার্ট পয়েন্টার ব্যবহার করা হয়। C ++ এ অনেক ধরনের স্মার্ট পয়েন্টার বিভিন্ন কাজে ব্যবহৃত হয়, যেমন auto_ptr , unique_ptr , এবং shared_ptr । Auto_ptr পয়েন্টারটি C ++ এর নতুন সংস্করণে অপ্রচলিত। স্বতন্ত্র_পিটিআর স্বয়ংক্রিয়_পিটিআর প্রতিস্থাপনে ব্যবহৃত হয়। এই নির্দেশকের বস্তু পয়েন্টারটির মালিকানা নিতে পারে। এই পয়েন্টারটির বস্তু পয়েন্টারটি স্বতন্ত্রভাবে মালিক, এবং অন্য কোন পয়েন্টার বস্তুর দিকে নির্দেশ করতে পারে না। Unique_ptr স্বয়ংক্রিয়ভাবে বস্তু মুছে ফেলে। এই পয়েন্টার সেই বস্তুগুলি পরিচালনা করে যদি বস্তুগুলি ধ্বংস হয়ে যায়, অথবা বস্তুর মান পরিবর্তিত হয় বা রিসেট () ফাংশন বলা হয়। Unique_ptr এর বৈশিষ্ট্য এবং এই পয়েন্টার এর ব্যবহার এই টিউটোরিয়ালে আলোচনা করা হয়েছে।

মূখ্য উপাদান সমূহ:







Unique_ptr অবজেক্টের দুটি প্রধান উপাদান নিচে দেওয়া হল:



A. সঞ্চিত পয়েন্টার:



এটি একটি অনন্য পয়েন্টার দ্বারা তৈরি বস্তুগুলি পরিচালনা করতে ব্যবহৃত হয়। এটি পয়েন্টার তৈরির সময় তৈরি করা হয় এবং এটি বিভিন্ন উপায়ে পরিবর্তন করা যায়।





B. সঞ্চিত ডিলিটার:

এটি সঞ্চিত পয়েন্টার টাইপের যুক্তি নেয় যা পরিচালিত বস্তু মুছে ফেলার জন্য ব্যবহৃত হয়। এটি পয়েন্টার তৈরির সময়ও তৈরি করা হয় এবং এটি বিভিন্ন উপায়ে পরিবর্তন করা যায়।



উদাহরণ 1: কনস্ট্রাকটর দিয়ে একটি ক্লাসের একটি পয়েন্টার অবজেক্ট তৈরি করুন

একটি ক্লাসের অনন্য পয়েন্টার বস্তু ঘোষণা করার এবং ক্লাসের পদ্ধতিতে প্রবেশ করার উপায় হল নিম্নলিখিত উদাহরণে দেখানো বস্তুগুলি ব্যবহার করে। একটি কনস্ট্রাক্টর এবং একটি পাবলিক পদ্ধতি সহ একটি ক্লাস কোডে ঘোষণা করা হয়েছে। নির্মাতার তিনটি যুক্তি আছে। তিনটি যুক্তি মান সহ কনস্ট্রাক্টরকে ডেকে প্রথম অনন্য পয়েন্টার তৈরি করা হয়েছে। দ্য ফলাফল() পদ্ধতিটি পয়েন্টার বস্তু দ্বারা বলা হয় যা নির্মাতার তিনটি যুক্তি মানের সমষ্টি গণনা করে। এরপরে, দ্বিতীয় অনন্য পয়েন্টার বস্তুটি কনস্ট্রাক্টরকে কল না করে তৈরি করা হয় এবং প্রথম পয়েন্টারটি দ্বিতীয় পয়েন্টারে স্থানান্তরিত হয়। দ্য ফলাফল() পদ্ধতিটি দ্বিতীয় পয়েন্টার বস্তু দ্বারা বলা হয়।

//প্রয়োজনীয় গ্রন্থাগার অন্তর্ভুক্ত করুন

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

namespace std ব্যবহার করে;

//শ্রেণীর সংজ্ঞা দাও
শ্রেণী সংযোজন{

int সংখ্যা 1, সংখ্যা 2, সংখ্যা 3;
জনসাধারণ:
//নির্মাতা ঘোষণা করুন
যোগ(int a, int b, int c)
{
সংখ্যা 1 = একটি;
সংখ্যা 2 = খ;
সংখ্যা 3 = গ;
}
//গণনা করার পদ্ধতি ঘোষণা করুনযোগফল
int ফলাফল()
{
প্রত্যাবর্তনসংখ্যা 1 + সংখ্যা 2 + সংখ্যা 3;
}
};
int প্রধান()
{
//প্রথম পয়েন্টার ঘোষণা করুন
unique_ptr পয়েন্টার 1(নতুন সংযোজন(চার পাঁচ,55,30));

খরচ<<'প্রথম পয়েন্টার ব্যবহার করে যোগফল ফলাফল:'<ফলাফল() <<'n';
//দ্বিতীয় পয়েন্টার ঘোষণা করুন
unique_ptr পয়েন্টার 2;
//প্রথম পয়েন্টারকে দ্বিতীয় পয়েন্টার এ নিয়ে যান
পয়েন্টার 2 = সরান(নির্দেশক 1);

খরচ<<'দ্বিতীয় পয়েন্টার ব্যবহার করে যোগফল ফলাফল:'<ফলাফল() <<'n';
return0;
}

আউটপুট:

উপরের কোডটি কার্যকর করার পর নিম্নলিখিত আউটপুটটি প্রদর্শিত হবে। 45, 55 এবং 30 এর যোগফল 130 যা উভয় পয়েন্টারগুলির জন্য মুদ্রিত হয়েছে।

উদাহরণ 2: কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর দিয়ে একটি ক্লাসের একটি পয়েন্টার অবজেক্ট তৈরি করুন

কনস্ট্রাক্টর এবং ডিস্ট্রাক্টর সহ একটি ক্লাসের একটি অনন্য পয়েন্টার বস্তু ঘোষণার উপায় নিম্নলিখিত উদাহরণে দেখানো হয়েছে। ক্লাসটিতে একটি যুক্তি সহ একটি কনস্ট্রাক্টর রয়েছে, ক্লাসের ভেরিয়েবলের মানের জন্য Display () নামে একটি সর্বজনীন পদ্ধতি এবং একটি ধ্বংসকারী যা ক্লাসের বস্তুটি ধ্বংস করার আগে একটি ধ্বংস বার্তা মুদ্রণ করবে। কোডে ইউনিক পয়েন্টার অবজেক্ট তৈরির পর Display () মেথড বলা হয়।

//প্রয়োজনীয় গ্রন্থাগার অন্তর্ভুক্ত করুন

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

namespace std ব্যবহার করে;

//শ্রেণীর সংজ্ঞা দাও
শ্রেণীর গ্রাহক
{
স্ট্রিং নাম;

জনসাধারণ:
//নির্মাতা ঘোষণা করুন
ক্রেতা(স্ট্রিং n)
{
নাম = n;
খরচ<<'সম্পদ বরাদ্দ করা হয়েছে।n';
}

//গ্রাহকের নাম মুদ্রণের পদ্ধতি ঘোষণা করুন
অকার্যকর প্রদর্শন()
{
খরচ<<'গ্রাহকের নাম হল:'<<নাম<<'n';
}

//ধ্বংসকারী ঘোষণা করুন
গ্রাহক()
{
খরচ<<'সম্পদ ধ্বংস হয়ে গেছে।n';
}
};
int প্রধান()
{
//রিসোর্স অবজেক্ট বরাদ্দ করুন যা unique_ptr এর মালিকানাধীন
unique_ptruPointer{নতুন গ্রাহক('মীর আব্বাস') };
uPointer->প্রদর্শন();
return0;
}

আউটপুট:

উপরের কোডটি কার্যকর করার পরে নিম্নলিখিত আউটপুটটি উপস্থিত হবে:

উদাহরণ 3: মালিকানা হস্তান্তরের পর পয়েন্টার চেক করুন

একটি ক্লাসের দুটি অনন্য পয়েন্টার তৈরি করে অনন্য পয়েন্টারটির মালিকানা পরীক্ষা করার উপায় নিম্নলিখিত উদাহরণে দেখানো হয়েছে। দুটি স্ট্রিং ভেরিয়েবল এবং একটি পাবলিক পদ্ধতি সহ একটি ক্লাস কোডে ঘোষণা করা হয়েছে। ক্লাসের Book_details () পদ্ধতিটি ক্লাসের প্রথম অনন্য পয়েন্টার বস্তু তৈরির পরে বলা হয়। পরবর্তী, দ্বিতীয় অনন্য পয়েন্টার বস্তু তৈরি করা হয়েছে, এবং প্রথম পয়েন্টারটি দ্বিতীয় পয়েন্টারে সরানো হয়েছে যা প্রথম পয়েন্টারকে ধ্বংস করে। উভয় পয়েন্টার মালিকানা পরে চেক করা উচিত।

//প্রয়োজনীয় গ্রন্থাগার অন্তর্ভুক্ত করুন

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

namespace std ব্যবহার করে;

//শ্রেণীর সংজ্ঞা দাও
ক্লাস বই{

স্ট্রিং শিরোনাম ='দ্য সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজ';
স্ট্রিং লেখক ='Bjarne Stroustrup';

জনসাধারণ:
//বইয়ের বিবরণ মুদ্রণের পদ্ধতি ঘোষণা করুন
voidBook_details()
{
খরচ<<'বইয়ের নাম:'<<শিরোনাম<<'n';
খরচ<<'লেখকের নাম: '<<লেখক<<'n';
}
};
int প্রধান()
{
//প্রথম পয়েন্টার ঘোষণা করুন
unique_ptr পয়েন্টার 1(নতুন বই());

নির্দেশক 1->বই_ বিস্তারিত();
//দ্বিতীয় পয়েন্টার ঘোষণা করুন
unique_ptr পয়েন্টার 2;
//প্রথম পয়েন্টারকে দ্বিতীয় পয়েন্টার এ নিয়ে যান
পয়েন্টার 2 = সরান(নির্দেশক 1);

//প্রথম পয়েন্টার চেক করুন
যদি (স্ট্যাটিক_কাস্ট(নির্দেশক 1))খরচ<<'প্রথম নির্দেশক শূন্য নয়n';
অন্য<<'প্রথম নির্দেশক শূন্যn';
//দ্বিতীয় পয়েন্টার চেক করুন
যদি (স্ট্যাটিক_কাস্ট(নির্দেশক 2))খরচ<<'দ্বিতীয় নির্দেশক শূন্য নয়n';
অন্য<<'দ্বিতীয় নির্দেশক শূন্যn';

return0;
}

আউটপুট:

উপরের কোডটি কার্যকর করার পর নিম্নলিখিত আউটপুটটি প্রদর্শিত হবে। আউটপুট অনুযায়ী, প্রথম পয়েন্টার মালিকানা সরানো হয়েছে, এবং বার্তা, প্রথম পয়েন্টারটি শূন্য প্রথম পয়েন্টার জন্য মুদ্রিত হয়েছে। দ্বিতীয় পয়েন্টার মালিকানা বিদ্যমান, এবং বার্তা, প্রথম পয়েন্টারটি শূন্য নয় দ্বিতীয় পয়েন্টার জন্য মুদ্রিত হয়েছে:

উপসংহার:

C ++ প্রোগ্রামিং এ একটি অনন্য পয়েন্টার ব্যবহারের উদ্দেশ্য এই উদাহরণে একাধিক উদাহরণ ব্যবহার করে বর্ণনা করা হয়েছে। একটি অনন্য পয়েন্টার তৈরির উপায়, পয়েন্টারটির মালিকানা স্থানান্তর এবং পয়েন্টারটির বর্তমান মালিকানা যাচাই করার জন্য এখানে পাঠকদের ইউনিক পয়েন্টার ব্যবহার সঠিকভাবে জানতে সাহায্য করার জন্য ব্যাখ্যা করা হয়েছে।