පවරන්නෝ (C++)

right|thumb|180px|විබෙදන්නන්ගේ ගවේෂක ඇලෙක්සැන්ඩර් ස්ටෙපනොෆ්
C++ පරිගණක ක්‍රමලේඛනයෙහිදී, **විබෙදන්නන්** යනු සම්මත එකතුවෙහි වැදගත් සංරචකයකි. සම්මත එකතුව විසින් කන්ටේනර ලෙසින් පොදුවේ හැඳින්වෙන වන, ලැයිස්තුව සහ කුලකය වැනි, බොහෝ දත්ත ව්‍යුහ සපයයි. මෙම කන්ටේනර තුල පවතින පොදු ගති ලක්ෂණයක් වන්නේ ක්‍රමලේඛයේ සම්පාදනය තුලදී ඒවායේ තරම වෙනස් කර ගැනීමට ඇති හැකියාවය. මෙය සාක්ෂාත් කරගැනුම සඳහා, සාමාන්‍යයෙන් යම් ආකාරයක ගතික මතක විබෙදුමක් අවශ්‍ය වෙයි. විබෙදන්නන් දෙන ලද කන්ටේනරයක් සඳහා වන මතකය විබෙදුම සහ නිදහස් කිරීම(allocation and deallocation) වෙනුවෙන් ලැබෙන ඉල්ලීම් සියල්ල හසුරුවයි. C++ සම්මත එකතුව සාමාන්‍යයෙන් භාවිතා වන පොදු කාර්යය විබෙදන්නන් සපයන අතර ක්‍රමලේඛකයා(:en:programmer)ට තමන් නිර්මාණය කල විබෙදන්නන්ද සැපයිය හැක.

විබෙදන්නන් සම්මත අච්චු එකතුවේ(:en:Standard Template Library)(STL) කොටසක් ලෙස නිමවන ලද්දේ ඇලෙ‍‍‍ක්සැන්ඩර් ස්ටෙපනොෆ්(:en:Alexander Stepanov) විසිනි. ඒවා නිපදවීමේ අරමුණ වූයේ සම්මත එකතුව වඩාත් නම්‍යශීලී කිරීම සහ මතක ආකෘතියෙන් (memory model) නිදහස් කර ක්‍රමලේඛකයාට නිර්මාණය කරන ලද සූචක(pointer) සහ යොමු(reference) ආකාර සම්මත එකතුවත් සමඟ භාවිතා කිරීමට ඉඩ දීමටය. කෙසේ වෙතත් STL C++සම්මත(:en:C++ standard) යක් බවට පත්කිරීමේ ක්‍රියාවලියේදී, මතක ආකෘතිය සම්පූර්නයෙන්ම උපුටා ගැනීම(abstraction ) නිසා පිළිගත නොහැකි කාර්ය ඵල(performance) ප්‍රශ්න මතුවන බව C++ ප්‍රමිතිකරණ කමිටුවට අවබෝධ විය. මෙයට පිළියමක් ලෙස විබෙදන්නන්ගේ අවශ්‍යතාවය වඩාත් සීමා කරන ලදී. මෙහි ප්‍රතිඵලයක් ලෙස විබෙදන්නන් විසින් සපයන වෙනස්කම් කිරීමේ හැකියාව ස්ටෙපනොෆ්ගේ දැක්මෙහි වූවාට වඩා වැඩියෙන් සීමා වී තිබේ.

එහෙත්, වෙනස් කල විබෙදන්නන් අවශ්‍යය වන අවස්තා බොහෝ ඇත. වෙනස් කල හැකි විබෙදන්නන් අවශ්‍යය වීමට පොදු වූ හේතු කිහිපයක් නම් මතක සංසද(:en:memory pool) භාවිතා කර විබෙදුමේ කාර්ය ඵලය වර්ධනය කරගැනීම සහ පොදුවේ බෙදාගත් මතකය (:en:shared memory) හෝ එකතු කර ගත් අනවශ්‍යය(garbage-collected) මතකය වැනි විවිධ මතක ආකාර වලට ප්‍රවේශය සංක්‍ෂිප්තකරණයයි. සාමාන්‍යයෙන්, කුඩා ප්‍රමාණයේ මතකයන් බහුලව විබෙදන අවස්තාවලදී විශේෂ වූ විබෙදන්නෙක් සිටීම වාසිදායකය.

## පසුබිම
ඇලෙ‍‍‍ක්සැන්ඩර් ස්ටෙපනොෆ්(:en:Alexander Stepanov) සහ මෙන්ග් ලී සම්මත අච්චු එකතුව(:en:Standard Template Library), C++(:en:C++) ප්‍රමිතිකරණ කමිටුවට 1994 වසරේ මාර්තු මාසයේදි ඉදිරිපත් කලේය.  සාමාන්‍යය විබෙදුම C heap allocation functions වටා සිහින් තීරයක් ලෙස ක්‍රමලේඛනගත කර ඇත, මෙය විශාල කොටස් ලෙස මතකය විබෙදන කන්ටේනර(vector සහ :en:deque ) වලට සාර්ථක වුවත්, කුඩා ප්‍රමාණයන්ගෙන් නිතර මතකය විබෙදන කන්ටේනර(map සහ list) වලට මෙමගින් මතකය විබෙදීම සාමාන්‍යයෙන් සෙමින් සිදුවේ.

කාර්ය ඵලය වැඩි කිරීමේ ප්‍රසිද්ධ ක්‍රමයක් නම් මතක සංසද(:en:memory pool) පදනම් කරගත් විබෙදන්නෙක් නිර්මාණය කිරීමයි. මෙහිදී එක්වරම මතකයෙන් විශාල ප්‍රමාණයේ කොටසක් වෙන්කෙරේ. නිර්මිත විබෙදන්නා සෑම විබෙදුමකදීම මතක සංසදයට සූචකයක් ඵලය ලෙස සපයයි. මතක සංසදය තුළ ආයුකාළය(lifetime) අවසන් වන විට මතකය නිදහස් වීම සිදු වේ. මතක සංසද පදනම් කරගත් විබෙදන්නෙක්ට උදාහරනයක් මෙහි ඇත.:en:Boost C++ Libraries

මතකය පාදක වූ වැරදි නිවැරදි කිරීම(:en:debugging) සඳහා යොදා ගැනීම නිර්මිත විබෙදන්නන්ගේ තවත් ප්‍රයෝජනයකි. වැරදි නිවැරදි කිරීමට අදාල තොරතුරු(debugging information) ගබඩා කරගැනීමට අමතර මතකයක් වෙන් කරන විබෙදන්නෙක් නිර්මාණය කර මෙය සිදු කල හැක.

### භාවිත
සම්මත කන්ටේනරයක් භාවිතා කරන විට, සාමාන්‍යයෙන් std::allocator: වන අච්චුව(template)ක් හරහ විබෙදන්නා හඳුන්වයි.

```cpp
namespace std {
  template  > class vector;
// ...
```

අනෙක් සියලුම සරණි අච්චු මෙන්ම සම්මත අච්චු එකතුවේ ඇති එකිනෙකට වෙනස් විබෙදුම් පරාමිතීන් සහිත කන්ටේනර වල අවස්ථා(instantiations)ද එකිනෙකට වෙනස් වේ. std::vector පරමිතියක් අපේක්ෂාවෙන් සිටින ශ්‍රිතයක් `vector` ආකාරය පමණක් පිළිගනී. 

### :en:C++11 හි විබෙදන්නන්ට කල සංශෝධන
නවතම C++ සම්මත අනුව විශයපථ(scoped) විබෙදන්නන්ට ඉඩ ලබා දෙන ලෙස විබෙදුම් අතුරු මුහුණත වැඩි දියුනු කර ඇත. එම නිසා දාමයක්(nested) ලෙස මතකය විබෙදීමට අවශ්‍යය කන්ටේනර වලට ඔවුන්ගේ විබෙදන්නාගෙන්ම මතකය වෙන්කල හැක.

## යොමුව
## බාහිර සබැඳි
*CodeGuru: Allocators (STL) .
*An introductory article "C++ Standard Allocator, An Introduction and Implementation" .
*A custom allocator implementation based on malloc

ප්‍රවර්ගය:C++ Standard Library
ප්‍රවර්ගය:Generic programming
ප්‍රවර්ගය:Articles with example C++ code