C ++ unique_ptr کا استعمال۔

Use C Unique_ptr



سمارٹ پوائنٹرز متحرک طور پر وسائل مختص کرنے کے لیے استعمال ہوتے ہیں۔ بہت سے قسم کے سمارٹ پوائنٹرز مختلف مقاصد کے لیے C ++ میں استعمال ہوتے ہیں ، جیسے۔ auto_ptr ، منفرد_ پی ٹی آر ، اور shared_ptr . Auto_ptr پوائنٹر کو C ++ کے نئے ورژن میں فرسودہ کر دیا گیا ہے۔ منفرد_ پی ٹی آر کو آٹو_ پی ٹی آر کی جگہ استعمال کیا جاتا ہے۔ اس پوائنٹر کی چیز پوائنٹر کی ملکیت لے سکتی ہے۔ اس پوائنٹر کا اعتراض منفرد طور پر پوائنٹر کا مالک ہے ، اور کوئی دوسرا پوائنٹر اس چیز کی طرف اشارہ نہیں کرسکتا ہے۔ unique_ptr اشیاء کو خود بخود حذف کر دیتا ہے۔ یہ اشارہ ان اشیاء کو سنبھالتا ہے اگر اشیاء تباہ ہوجاتی ہیں ، یا آبجیکٹ کی ویلیو بدل جاتی ہے یا ری سیٹ () فنکشن کہا جاتا ہے۔ unique_ptr کی خصوصیات اور اس پوائنٹر کے استعمال پر اس ٹیوٹوریل میں بحث کی گئی ہے۔

اہم اجزاء:







unique_ptr آبجیکٹ کے دو اہم اجزاء ذیل میں فراہم کیے گئے ہیں:



ذخیرہ شدہ پوائنٹر:



یہ ایک منفرد پوائنٹر کے ذریعہ تخلیق کردہ اشیاء کو منظم کرنے کے لیے استعمال ہوتا ہے۔ یہ پوائنٹر بنانے کے وقت بنایا گیا ہے ، اور اسے مختلف طریقوں سے تبدیل کیا جاسکتا ہے۔





B. اسٹورڈ ڈیلیٹر:

یہ ذخیرہ شدہ پوائنٹر قسم کی دلیل لیتا ہے جو کہ منظم شے کو حذف کرنے کے لیے استعمال ہوتا ہے۔ یہ پوائنٹر تخلیق کے وقت بھی بنایا گیا ہے ، اور اسے مختلف طریقوں سے تبدیل کیا جاسکتا ہے۔



مثال 1: کنسٹرکٹر کے ساتھ کلاس کا ایک پوائنٹر آبجیکٹ بنائیں۔

کسی کلاس کی منفرد پوائنٹر اشیاء کا اعلان کرنے اور کلاس کے طریقہ تک رسائی حاصل کرنے کا طریقہ مندرجہ ذیل مثال میں دکھائے گئے اشیاء کا استعمال ہے۔ ایک کلاس جس میں کنسٹرکٹر اور عوامی طریقہ کار ہے کوڈ میں قرار دیا گیا ہے۔ کنسٹرکٹر کے پاس تین دلائل ہیں۔ تین منفرد اقدار کے ساتھ کنسٹرکٹر کو بلا کر پہلا منفرد پوائنٹر بنایا گیا ہے۔ کی نتیجہ () طریقہ کار کو پوائنٹر آبجیکٹ کہتے ہیں جو کنسٹرکٹر کی تین دلیل اقدار کے مجموعے کا حساب لگاتا ہے۔ اگلا ، دوسرا منفرد پوائنٹر آبجیکٹ کنسٹرکٹر کو بلائے بغیر بنایا گیا ہے ، اور پہلا پوائنٹر دوسرے پوائنٹر میں منتقل کردیا گیا ہے۔ کی نتیجہ () طریقہ دوسرے پوائنٹر آبجیکٹ کے ذریعہ کہا جاتا ہے۔

//ضروری لائبریریاں شامل کریں۔

#شامل کریں

#شامل کریں

اسپیس نام کا استعمال کرتے ہوئے؛

//کلاس کی وضاحت کریں۔
کلاس کا اضافہ{

انٹ نمبر 1 ، نمبر 2 ، نمبر 3
عوام:
//کنسٹرکٹر کا اعلان کریں۔
اضافہ(int a، int b، int c)
{
نمبر 1 = ایک؛
نمبر 2 = بی
نمبر 3 = سی
}
//حساب لگانے کا طریقہ بیان کریں۔رقم
int نتیجہ()
{
واپسینمبر 1 + نمبر 2 + نمبر 3
}
}؛
int مرکزی()
{
//پہلے اشارے کا اعلان کریں۔
منفرد_ پی ٹی آر پوائنٹر 1۔(نیا اضافہ(چار پانچ،55۔،30۔))؛

لاگت<<'پہلے پوائنٹر کا استعمال کرتے ہوئے رقم کا نتیجہ:'<نتیجہ() <<'n'؛
//دوسرا اشارہ بیان کریں۔
منفرد_ پی ٹی آر پوائنٹر 2
//پہلے پوائنٹر کو دوسرے پوائنٹر پر منتقل کریں۔
پوائنٹر 2 = منتقل(اشارہ 1)؛

لاگت<<'دوسرے پوائنٹر کا استعمال کرتے ہوئے رقم کا نتیجہ:'<نتیجہ() <<'n'؛
واپسی 0؛
}

آؤٹ پٹ:

مندرجہ بالا کوڈ پر عمل کرنے کے بعد درج ذیل آؤٹ پٹ ظاہر ہوگا۔ 45 ، 55 اور 30 ​​کا مجموعہ 130 ہے جو دونوں اشاروں کے لیے چھاپا گیا ہے۔

مثال 2: کنسٹرکٹر اور ڈسٹرکٹر کے ساتھ کلاس کا ایک پوائنٹر آبجیکٹ بنائیں۔

کنسٹرکٹر اور ڈسٹرکٹر کے ساتھ کسی کلاس کے منفرد پوائنٹر آبجیکٹ کو ڈیکلیئر کرنے کا طریقہ مندرجہ ذیل مثال میں دکھایا گیا ہے۔ کلاس میں ایک کنسٹرکٹر ہوتا ہے جس میں ایک دلیل ہوتی ہے ، ڈسپلے () نامی ایک عوامی طریقہ جس میں کلاس متغیر کی قدر ہوتی ہے ، اور ایک ڈسٹرکٹر جو کلاس کے آبجیکٹ کو تباہ کرنے سے پہلے تباہی کا پیغام چھاپتا ہے۔ ڈسپلے () طریقہ کوڈ میں منفرد پوائنٹر آبجیکٹ بنانے کے بعد کہا جاتا ہے۔

//ضروری لائبریریاں شامل کریں۔

#شامل کریں

#شامل کریں

اسپیس نام کا استعمال کرتے ہوئے؛

//کلاس کی وضاحت کریں۔
کلاس کسٹمر
{
سٹرنگ کا نام

عوام:
//کنسٹرکٹر کا اعلان کریں۔
صارف(تار n)
{
نام = n؛
لاگت<<وسائل مختص ہیں۔n'؛
}

//کسٹمر کا نام پرنٹ کرنے کا طریقہ اعلان کریں۔
باطل ڈسپلے()
{
لاگت<<'گاہک کا نام ہے:'<<نام<<'n'؛
}

//تخریب کار کا اعلان کریں۔
کسٹمر۔()
{
لاگت<<'وسائل تباہ ہو گئے ہیں۔n'؛
}
}؛
int مرکزی()
{
//ریسورس آبجیکٹ مختص کریں جو کہ منفرد_ptr کی ملکیت ہے۔
unique_ptruPointer{نیا گاہک(میر عباس) }؛
uPointer->ڈسپلے()؛
واپسی 0؛
}

آؤٹ پٹ:

مندرجہ ذیل آؤٹ پٹ مندرجہ بالا کوڈ پر عمل کرنے کے بعد ظاہر ہوگا:

مثال 3: ملکیت منتقل کرنے کے بعد پوائنٹر چیک کریں۔

منفرد پوائنٹر کی ملکیت چیک کرنے کا طریقہ درج ذیل مثال میں دکھایا گیا ہے ایک کلاس کے دو منفرد پوائنٹر بنا کر۔ کوڈ میں دو سٹرنگ متغیرات اور ایک عوامی طریقہ کے ساتھ ایک کلاس کا اعلان کیا گیا ہے۔ کلاس کا Book_details () طریقہ کلاس کا پہلا منفرد پوائنٹر آبجیکٹ بنانے کے بعد کہا جاتا ہے۔ اگلا ، دوسرا منفرد پوائنٹر آبجیکٹ بنایا گیا ہے ، اور پہلے پوائنٹر کو دوسرے پوائنٹر میں منتقل کردیا گیا ہے جو پہلے پوائنٹر کو تباہ کردیتا ہے۔ دونوں اشاروں کی ملکیت کو بعد میں چیک کیا جانا چاہیے۔

//ضروری لائبریریاں شامل کریں۔

#شامل کریں

#شامل کریں

اسپیس نام کا استعمال کرتے ہوئے؛

//کلاس کی وضاحت کریں۔
کلاس کی کتاب{

سٹرنگ ٹائٹل ='سی ++ پروگرامنگ لینگویج'؛
سٹرنگ مصنف ='بجارنے سٹراسٹرپ'؛

عوام:
//کتاب کی تفصیلات چھاپنے کا طریقہ بیان کریں۔
voidBook_details()
{
لاگت<<کتاب کا نام:<<عنوان<<'n'؛
لاگت<<'مصنف کا نام:'<<مصنف<<'n'؛
}
}؛
int مرکزی()
{
//پہلے اشارے کا اعلان کریں۔
منفرد_ پی ٹی آر پوائنٹر 1۔(نئی کتاب())؛

اشارہ 1->کتاب کی تفصیلات۔()؛
//دوسرا اشارہ بیان کریں۔
منفرد_ پی ٹی آر پوائنٹر 2
//پہلے پوائنٹر کو دوسرے پوائنٹر پر منتقل کریں۔
پوائنٹر 2 = منتقل(اشارہ 1۔)؛

//پہلا اشارہ چیک کریں۔
اگر (جامد_ کاسٹ(اشارہ 1))لاگت<<'پہلا اشارہ کالعدم نہیں ہے۔n'؛
دوسری جگہ<<پہلا اشارہ کالعدم ہے۔n'؛
//دوسرا اشارہ چیک کریں۔
اگر (جامد_ کاسٹ(پوائنٹر 2))لاگت<<دوسرا پوائنٹر کالعدم نہیں ہے۔n'؛
دوسری جگہ<<دوسرا پوائنٹر کالعدم ہے۔n'؛

واپسی 0؛
}

آؤٹ پٹ:

مندرجہ بالا کوڈ پر عمل کرنے کے بعد درج ذیل آؤٹ پٹ ظاہر ہوگا۔ آؤٹ پٹ کے مطابق ، پہلے پوائنٹر کی ملکیت کو ہٹا دیا گیا ، اور پیغام ، پہلا اشارہ کالعدم ہے۔ پہلے پوائنٹر کے لیے پرنٹ کیا ہے۔ دوسرے پوائنٹر کی ملکیت موجود ہے ، اور پیغام ، پہلا اشارہ کالعدم نہیں ہے۔ دوسرے پوائنٹر کے لیے پرنٹ کیا ہے:

نتیجہ:

C ++ پروگرامنگ میں ایک منفرد پوائنٹر کے استعمال کے مقاصد کو متعدد مثالوں کے ذریعے اس ٹیوٹوریل میں بیان کیا گیا ہے۔ منفرد پوائنٹر بنانے کے طریقے ، پوائنٹر کی ملکیت کو منتقل کرنے اور پوائنٹر کی موجودہ ملکیت چیک کرنے کے طریقے یہاں بیان کیے گئے ہیں تاکہ قارئین کو منفرد پوائنٹر کے استعمال کو صحیح طریقے سے جاننے میں مدد ملے۔