சி ++ பகிரப்பட்ட_பிடிஆர்

C Shared_ptr



தி பகிரப்பட்ட_பிடிஆர் சுட்டிக்காட்டியால் உருவாக்கப்பட்ட பொருளின் பகிரப்பட்ட உரிமையைக் கொண்டிருக்கும் சி ++ இன் ஒரு வகை ஸ்மார்ட் சுட்டிகள். சுட்டிக்காட்டியை மற்றொரு பொருளில் சேமிக்கும்போது அது பொருளின் உரிமையைப் பகிர்ந்து கொள்கிறது, மேலும் பகிரப்பட்ட குறிப்பு கவுண்டர் உரிமையாளர்களின் எண்ணிக்கையை கணக்கிடுகிறது. தி பகிரப்பட்ட_பிடிஆர் பொருளை நகலெடுத்த பிறகு குறிப்பு கவுண்டரை ஒன்று அதிகரிக்கிறது மற்றும் பொருளை அழித்த பிறகு குறிப்பு கவுண்டரை ஒன்றால் குறைக்கிறது. பொருளுக்கு சொந்தமான நினைவகம் கடைசியாக சொந்தமானதாக இருந்தால் மறு ஒதுக்கீடு செய்யப்படும் பகிரப்பட்ட_பிடிஆர் அழிக்கப்படுகிறது, அல்லது மீட்டமை () பொருளுக்கு மற்றொரு சுட்டியை ஒதுக்க செயல்பாடு அழைக்கப்படுகிறது. எப்பொழுது பகிரப்பட்ட_பிடிஆர் எந்தப் பொருளுக்கும் சொந்தமில்லை, அது வெற்று பகிரப்பட்ட சுட்டிக்காட்டி என்று அழைக்கப்படுகிறது. பல்வேறு பயன்கள் பகிரப்பட்ட_பிடிஆர் இந்த டுடோரியலில் காட்டப்பட்டுள்ளது.

எடுத்துக்காட்டு 1: வெவ்வேறு வழிகளில் பகிரப்பட்ட சுட்டியை அறிவிக்கவும்

பகிரப்பட்ட சுட்டியை அறிவிக்க மூன்று வெவ்வேறு வழிகள் பின்வரும் எடுத்துக்காட்டில் காட்டப்பட்டுள்ளன. கட்டமைப்பாளருடன் ஒரு வகுப்பு மற்றும் பொது முறை குறியீட்டில் அறிவிக்கப்பட்டுள்ளது. கட்டமைப்பாளருடன் ஒரு புதிய பகிரப்பட்ட பொருள் உருவாக்கப்படும் போது கட்டமைப்பாளர் ஒரு செய்தியை அச்சிடுவார். தி காட்சி () அழைப்பு பகிரப்பட்ட சுட்டிக்காட்டி பொருளின் அடிப்படையில் செய்திகள் அச்சிடப்படும். இங்கே, முதல் பகிரப்பட்ட சுட்டிக்காட்டி பொருள் கட்டமைப்பாளரை அழைக்காமல் உருவாக்கப்பட்டது. இரண்டாவது பகிரப்பட்ட சுட்டிக்காட்டி பொருள் கட்டமைப்பாளரை அழைப்பதன் மூலம் உருவாக்கப்பட்டது. முதல் பகிரப்பட்ட சுட்டியை ஒதுக்கி மூன்றாவது பகிரப்பட்ட சுட்டிக்காட்டி உருவாக்கப்பட்டது. தி காட்சி () மூன்று பகிரப்பட்ட சுட்டிக்காட்டி பொருள்களைப் பயன்படுத்தி முறை மூன்று முறை அழைக்கப்படுகிறது.







// தேவையான நூலகங்களைச் சேர்க்கவும்

#சேர்க்கிறது

#சேர்க்கிறது

namespacestd ஐப் பயன்படுத்துதல்;

// வகுப்பை வரையறுக்கவும்
classMyClass{
பொது:
// கட்டமைப்பாளரை அறிவிக்கவும்
என் வகுப்பு() {
செலவு<<'கட்டமைப்பாளர் அழைக்கப்படுகிறார். n';
}
// உரையை அச்சிட ஒரு முறையை அறிவிக்கவும்
வெற்றிட காட்சி(சரம் str)
{
செலவு<<'காட்சி () முறை இதிலிருந்து அழைக்கப்படுகிறது'<<<<'சுட்டிக்காட்டி. n';
}
};

உள்()
{
// கன்ஸ்ட்ரக்டரை அழைக்காமல் ஷேர்ட்_ப்டிரை துவக்கவும்
பகிரப்பட்ட_பிடிஆர் பி 1=பகிரப்பட்டது();
ப 1->காட்சி('முதல்');
// கன்ஸ்ட்ரக்டரை அழைப்பதன் மூலம் பகிர்ந்த_பிரிவை துவக்கவும்
பகிரப்பட்ட_பிடிஆர் பி 2=பகிரப்பட்ட_பிடிஆர்(newMyClass);
p2->காட்சி('இரண்டாவது');

// பகிர்வு மூலம் பகிரப்பட்ட_தொடக்கத்தை தொடங்கவும்
பகிரப்பட்ட_பிடிஆர் பி 3=ப 1;
p3->காட்சி('மூன்றாவது');
திரும்ப 0;
}

வெளியீடு:



மேலே உள்ள குறியீட்டைச் செயல்படுத்திய பின் பின்வரும் வெளியீடு தோன்றும். கட்டமைப்பாளர் இரண்டாவது பொருளை உருவாக்கும் நேரத்தில் மட்டுமே அழைத்தார். எனவே, கட்டமைப்பாளரின் செய்தி ஒரு முறை மட்டுமே அச்சிடப்பட்டது:







எடுத்துக்காட்டு 2: சேமிக்கப்பட்ட பகிரப்பட்ட சுட்டிக்காட்டி இருப்பிடத்தை அச்சிடுங்கள்

சேமிக்கப்பட்ட, பகிரப்பட்ட சுட்டிக்காட்டி இருப்பிடத்தை திரும்பப் பெறுவதற்கு get () செயல்பாடு பகிரப்பட்ட சுட்டிக்காட்டி பயன்படுத்தப்படுகிறது. பின்வரும் உதாரணம், வர்க்கம் மற்றும் செயல்பாட்டினால் உருவாக்கப்பட்ட சேமிக்கப்பட்ட, பகிரப்பட்ட சுட்டிகளின் இருப்பிடத்தை அச்சிடும். இங்கே, ஒரு கன்ஸ்ட்ரக்டர் கொண்ட ஒரு வகுப்பு பகிரப்பட்ட சுட்டியை உருவாக்கப் பயன்படுத்தப்படும் என வரையறுக்கப்பட்டுள்ளது. பகிரப்பட்ட சுட்டியை உருவாக்க மற்றும் பகிரப்பட்ட சுட்டிக்காட்டி இருப்பிடத்தை get () செயல்பாட்டைப் பயன்படுத்தி அச்சிட ஒரு செயல்பாடு அறிவிக்கப்பட்டுள்ளது. இந்த குறியீட்டில், முதல் பகிரப்பட்ட சுட்டிக்காட்டி வகுப்பைப் பயன்படுத்தி உருவாக்கப்பட்டது, இரண்டாவது பகிரப்பட்ட சுட்டிக்காட்டி செயல்பாட்டைப் பயன்படுத்தி உருவாக்கப்பட்டது, மற்றும் மூன்றாவது பகிரப்பட்ட சுட்டிக்காட்டி முதல் சுட்டியை வழங்குவதன் மூலம் உருவாக்கப்பட்டது.

// தேவையான நூலகங்களைச் சேர்க்கவும்

#சேர்க்கிறது

#சேர்க்கிறது

namespacestd ஐப் பயன்படுத்துதல்;

// வகுப்பை வரையறுக்கவும்
classMyClass
{
பொது:
// கட்டமைப்பாளரை அறிவிக்கவும்
என் வகுப்பு() {
செலவு<<'கட்டமைப்பாளர் அழைக்கப்படுகிறார். n';
}
};
// சுட்டியை துவக்க செயல்பாட்டை வரையறுக்கவும்
voidInit_shared_ptr()
{
பகிரப்பட்ட_பிடிஆர் பி 2(newMyClass);
செலவு<<p2பெறு() <<' n';
}

உள்()
{
// கன்ஸ்ட்ரக்டரை அழைப்பதன் மூலம் பகிர்ந்த_பிரிவை துவக்கவும்
பகிரப்பட்ட_பிடிஆர் பி 1=பகிரப்பட்ட_பிடிஆர்(newMyClass);
செலவு<<ப 1பெறு() <<' n';

// அழைப்பு செயல்பாட்டின் மூலம் பகிர்வு_ப்டிரை துவக்கவும்
Init_shared_ptr();

// பகிர்வு மூலம் பகிரப்பட்ட_தொடக்கத்தை தொடங்கவும்
பகிரப்பட்ட_பிடிஆர் பி 3=ப 1;
செலவு<<p3பெறு() <<' n';
திரும்ப 0;
}

வெளியீடு:



மேலே உள்ள குறியீட்டைச் செயல்படுத்திய பின் பின்வரும் ஒத்த வெளியீடு தோன்றும். வெளியீட்டில், முதல் மற்றும் மூன்றாவது பகிரப்பட்ட சுட்டிகளுக்கான get () செயல்பாட்டின் திரும்பிய மதிப்பு ஒன்றுதான். இருப்பினும், இரண்டாவது பகிரப்பட்ட சுட்டிக்காட்டி வேறுபட்டது:

எடுத்துக்காட்டு 3: பகிரப்பட்ட சுட்டிக்காட்டி பொருள்களை எண்ணுங்கள்

பின்வரும் உதாரணம் சுட்டியை உருவாக்கி அழித்தபின் பகிரப்பட்ட சுட்டிக்காட்டியால் சுட்டிக்காட்டப்பட்ட பொருட்களின் எண்ணிக்கையை கணக்கிடுவதற்கான வழியை சித்தரிக்கிறது. கட்டமைப்பாளருடன் ஒரு வகுப்பு குறியீட்டில் அறிவிக்கப்பட்டுள்ளது. முதல் பகிரப்பட்ட சுட்டிக்காட்டி வகுப்பைப் பயன்படுத்தி உருவாக்கப்பட்டது, இரண்டாவது பகிரப்பட்ட சுட்டிக்காட்டி முதல் பகிரப்பட்ட சுட்டியைப் பயன்படுத்தி உருவாக்கப்பட்டது. மீட்டமைப்பு () செயல்பாட்டை அழைப்பதற்கு முன்னும் பின்னும் பகிரப்பட்ட இரண்டு சுட்டிகளால் சுட்டிக்காட்டப்பட்ட பொருட்களின் எண்ணிக்கை பின்னர் அச்சிடப்பட்டது.

// தேவையான நூலகங்களைச் சேர்க்கவும்

#சேர்க்கிறது

#சேர்க்கிறது

namespacestd ஐப் பயன்படுத்துதல்;
// வகுப்பை வரையறுக்கவும்
classMyClass{
பொது:
// கட்டமைப்பாளரை அறிவிக்கவும்
என் வகுப்பு() {
செலவு<<'கட்டமைப்பாளர் அழைக்கப்படுகிறார். n';
}
};
உள்()
{
// கன்ஸ்ட்ரக்டரை அழைப்பதன் மூலம் முதல் ஷேர்ட்_ப்டிரை துவக்கவும்
பகிரப்பட்ட_பிடிஆர் பி 1(newMyClass);

// முதல் சுட்டிக்காட்டி மூலம் பகிரப்பட்ட_எப்டிஆர் பொருள்களின் எண்ணிக்கையைக் காட்டு
செலவு<<'p1 சுட்டிக்காட்டுகிறது'<<ப 1பயன்படுத்த_ எண்ணிக்கை() <<'பொருள் (கள்) n';
// முதல் பகிர்ந்த_ப்டரைப் பயன்படுத்தி இரண்டாவது பகிர்வு_ப்டரைத் தொடங்கவும்
பகிரப்பட்ட_பிடிஆர் பி 2(ப 1);
// முதல் மற்றும் இரண்டாவது சுட்டிகள் மூலம் பகிரப்பட்ட_பொருள் பொருள்களின் எண்ணிக்கையைக் காட்டு
செலவு<<'p2 சுட்டிக்காட்டுகிறது'<<p2பயன்படுத்த_ எண்ணிக்கை() <<'பொருள் (கள்) n';
செலவு<<'p1 சுட்டிக்காட்டுகிறது'<<ப 1பயன்படுத்த_ எண்ணிக்கை() <<'பொருள் (கள்) n';
// பகிர்ந்த_பொருள் பொருளில் இருந்து முதல் சுட்டியின் உரிமையை அகற்றவும்
ப 1மீட்டமை();
// பகிரப்பட்ட_பிரிவு பொருள்களின் எண்ணிக்கையை இரண்டாவது சுட்டிக்காட்டி மூலம் காட்டவும்
செலவு<<'p2 சுட்டிக்காட்டுகிறது'<<p2பயன்படுத்த_ எண்ணிக்கை() <<'பொருள் (கள்) n';
திரும்ப 0;
}

வெளியீடு:

மேலே உள்ள குறியீட்டைச் செயல்படுத்திய பின் பின்வரும் வெளியீடு தோன்றும். முதல் குறிப்பு, ப 1 , உருவாக்கிய பிறகு ஒரு பொருளைச் சுட்டிக்காட்டுகிறது. இரண்டாவது சுட்டியை உருவாக்கிய பிறகு, p2 , முதல் சுட்டியைப் பயன்படுத்தி, ப 1 , இரண்டு சுட்டிகள் சுட்டிக்காட்டி பகிர்வுக்கு இரண்டு பொருள்களை சுட்டிக்காட்டுகின்றன. சுட்டிக்காட்டிக்கு மீட்டமைப்பு () செயல்பாட்டை அழைத்த பிறகு, ப 1 , ஒரு பொருள் அழிக்கப்பட்டது, மற்றும் சுட்டிக்காட்டி, p2 , இப்போது ஒரு பொருளை மட்டுமே சுட்டிக்காட்டுகிறது.

முடிவுரை:

சி ++ இல் பகிரப்பட்ட சுட்டியைப் பயன்படுத்துவதற்கான நோக்கங்கள் எளிய எடுத்துக்காட்டுகளைப் பயன்படுத்தி இந்த டுடோரியலில் விளக்கப்பட்டுள்ளன. வெவ்வேறு வழிகளில் பகிரப்பட்ட சுட்டிகளை உருவாக்குதல், பகிரப்பட்ட சுட்டிக்காட்டி இருப்பிடத்தைப் பெறுதல் மற்றும் பகிரப்பட்ட சுட்டிகளால் சுட்டிக்காட்டப்பட்ட பொருட்களின் எண்ணிக்கையை எண்ணுதல். இந்த டுடோரியலைப் படித்த பிறகு சி ++ குறியீட்டாளர்கள் தங்கள் குறியீட்டில் பகிரப்பட்ட சுட்டியைப் பயன்படுத்த முடியும் என்று நம்புகிறேன்.