C ++ shared_ptr

C Shared_ptr



کی shared_ptr C ++ کے سمارٹ پوائنٹرز کی ایک قسم ہے جس میں اشارے کی تخلیق کردہ اشیاء کی مشترکہ ملکیت ہوتی ہے۔ یہ اشیاء کی ملکیت کو اشتراک کرتا ہے جب پوائنٹر کو دوسری شے میں ذخیرہ کرتا ہے ، اور مشترکہ حوالہ کاؤنٹر مالکان کی تعداد کو شمار کرتا ہے۔ کی shared_ptr آبجیکٹ کو کاپی کرنے کے بعد ریفرنس کاؤنٹر کو ایک سے بڑھاتا ہے اور آبجیکٹ کو تباہ کرنے کے بعد ریفرنس کاؤنٹر کو ایک سے کم کرتا ہے۔ آبجیکٹ کی ملکیت والی میموری دوبارہ الاٹ کی جاتی ہے اگر آخری چیز کی ملکیت ہو۔ shared_ptr تباہ ہو جاتا ہے ، یا ری سیٹ () فنکشن کو آبجیکٹ کے لیے ایک اور پوائنٹر تفویض کرنے کے لیے کہا جاتا ہے۔ جب shared_ptr کسی چیز کا مالک نہیں ہے ، پھر اسے خالی مشترکہ اشارہ کہا جاتا ہے۔ کے مختلف استعمالات۔ shared_ptr اس ٹیوٹوریل میں دکھایا گیا ہے۔

مثال 1: مختلف طریقوں سے مشترکہ اشارے کا اعلان کریں۔

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







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

#شامل کریں

#شامل کریں

namespacestd استعمال کر رہا ہے۔؛

// کلاس کی وضاحت کریں۔
کلاس مائی کلاس۔{
عوام:
// تعمیر کنندہ کا اعلان کریں۔
میری جماعت() {
لاگت<<'کنسٹرکٹر کہا جاتا ہے۔n'؛
}
// متن پرنٹ کرنے کا طریقہ بیان کریں۔
voidDisplay(سٹرنگ)
{
لاگت<<'ڈسپلے () طریقہ کار سے کہا جاتا ہے'<<p<<'اشارہ.n'؛
}
}؛

اندرونی()
{
// تعمیر کنندہ کو کال کیے بغیر shared_ptr شروع کریں۔
shared_ptr p1=make_shared()؛
p1->ڈسپلے('پہلا')؛
// تعمیر کنندہ کو کال کرکے share_ptr کو شروع کریں۔
shared_ptr p2=shared_ptr(newMyClass)؛
p2->ڈسپلے('دوسرا')؛

// اسائنمنٹ کے ذریعے shared_ptr کو شروع کریں۔
shared_ptr p3=p1؛
p3->ڈسپلے('تیسرے')؛
واپسی 0؛
}

آؤٹ پٹ:



مندرجہ ذیل آؤٹ پٹ اوپر کوڈ پر عمل کرنے کے بعد ظاہر ہوگا۔ کنسٹرکٹر نے صرف دوسری آبجیکٹ تخلیق کے وقت بلایا ہے۔ تو ، کنسٹرکٹر کا پیغام صرف ایک بار چھاپا گیا ہے:







مثال 2: ذخیرہ شدہ مشترکہ پوائنٹر مقام پرنٹ کریں۔

گیٹ () فنکشن شیئرڈ پوائنٹر اسٹورڈ ، شیئرڈ پوائنٹر لوکیشن لوٹنے کے لیے استعمال ہوتا ہے۔ درج ذیل مثال ذخیرہ شدہ ، مشترکہ پوائنٹرز کے مقام کو پرنٹ کرے گی جو کلاس اور فنکشن کے ذریعہ بنائے گئے ہیں۔ یہاں ، ایک کنسٹرکٹر والی کلاس کو مشترکہ پوائنٹر بنانے کے لیے استعمال کرنے کی وضاحت کی گئی ہے۔ مشترکہ پوائنٹر بنانے اور get () فنکشن کا استعمال کرتے ہوئے مشترکہ پوائنٹر لوکیشن پرنٹ کرنے کے لیے ایک فنکشن کا اعلان کیا گیا ہے۔ اس کوڈ میں ، پہلا مشترکہ پوائنٹر کلاس کا استعمال کرتے ہوئے بنایا گیا ہے ، دوسرا مشترکہ پوائنٹر فنکشن کا استعمال کرتے ہوئے بنایا گیا ہے ، اور تیسرا مشترکہ پوائنٹر پہلا پوائنٹر تفویض کرکے بنایا گیا ہے۔

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

#شامل کریں

#شامل کریں

namespacestd استعمال کر رہا ہے۔؛

// کلاس کی وضاحت کریں۔
کلاس مائی کلاس۔
{
عوام:
// تعمیر کنندہ کا اعلان کریں۔
میری جماعت() {
لاگت<<'کنسٹرکٹر کہا جاتا ہے۔n'؛
}
}؛
// پوائنٹر کو شروع کرنے کے لیے فنکشن کی وضاحت کریں۔
voidInit_shared_ptr()
{
shared_ptr p2(newMyClass)؛
لاگت<<p2.حاصل کریں() <<'n'؛
}

اندرونی()
{
// تعمیر کنندہ کو کال کرکے share_ptr کو شروع کریں۔
shared_ptr p1=shared_ptr(newMyClass)؛
لاگت<<p1.حاصل کریں() <<'n'؛

// تقریب کو کال کرکے share_ptr کو شروع کریں۔
Init_shared_ptr()؛

// اسائنمنٹ کے ذریعے shared_ptr کو شروع کریں۔
shared_ptr p3=p1؛
لاگت<<p3.حاصل کریں() <<'n'؛
واپسی 0؛
}

آؤٹ پٹ:



مندرجہ بالا اسی طرح کی پیداوار مندرجہ بالا کوڈ پر عمل کرنے کے بعد ظاہر ہوگی۔ آؤٹ پٹ میں ، پہلے اور تیسرے مشترکہ اشارے کے لیے get () فنکشن کی لوٹی ہوئی قیمت ایک جیسی ہے۔ تاہم ، دوسرا مشترکہ اشارہ مختلف ہے:

مثال 3: مشترکہ پوائنٹر آبجیکٹ کو شمار کریں۔

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

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

#شامل کریں

#شامل کریں

namespacestd استعمال کر رہا ہے۔؛
// کلاس کی وضاحت کریں۔
کلاس مائی کلاس۔{
عوام:
// تعمیر کنندہ کا اعلان کریں۔
میری جماعت() {
لاگت<<'کنسٹرکٹر کہا جاتا ہے۔n'؛
}
}؛
اندرونی()
{
// کنسٹرکٹر کو کال کرکے پہلا مشترکہ_ پی ٹی آر شروع کریں۔
shared_ptr p1(newMyClass)؛

// پہلے پوائنٹر کے ذریعہ shared_ptr اشیاء کی تعداد دکھائیں۔
لاگت<<'p1 اشارہ کرتا ہے'<<p1.استعمال_کاؤنٹ() <<آبجیکٹn'؛
// پہلے shared_ptr کا استعمال کرتے ہوئے دوسرا shared_ptr شروع کریں۔
shared_ptr p2(p1)؛
// مشترکہ_ پی ٹی آر اشیاء کی تعداد کو پہلے اور دوسرے اشاروں سے دکھائیں۔
لاگت<<'p2 اشارہ کرتا ہے'<<p2.استعمال_کاؤنٹ() <<آبجیکٹn'؛
لاگت<<'p1 اشارہ کرتا ہے'<<p1.استعمال_کاؤنٹ() <<آبجیکٹn'؛
// shared_ptr آبجیکٹ سے پہلے پوائنٹر کی ملکیت کو ہٹا دیں۔
p1.ری سیٹ()؛
// دوسرے پوائنٹر کے ذریعہ shared_ptr اشیاء کی تعداد دکھائیں۔
لاگت<<'p2 اشارہ کرتا ہے'<<p2.استعمال_کاؤنٹ() <<آبجیکٹn'؛
واپسی 0؛
}

آؤٹ پٹ:

مندرجہ ذیل آؤٹ پٹ اوپر کوڈ پر عمل کرنے کے بعد ظاہر ہوگا۔ پہلا اشارہ ، p1 ، تخلیق کے بعد ایک شے کی طرف اشارہ کر رہا ہے۔ دوسرا پوائنٹر بنانے کے بعد ، p2 ، پہلے پوائنٹر کا استعمال کرتے ہوئے ، p1 ، دونوں اشارے اشتراک کرنے کے لیے دو اشیاء کی طرف اشارہ کر رہے ہیں۔ پوائنٹر کے لیے reset () فنکشن کو کال کرنے کے بعد ، p1 ، ایک چیز کو تباہ کر دیا گیا ہے ، اور پوائنٹر ، p2 ، اب صرف ایک شے کی طرف اشارہ کر رہا ہے۔

نتیجہ:

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