آرایه های CLR نوع جدیدی از آرایه ها هستند که در محیط دات نت (.NET) ارائه شده اند و همان طور که از نامشان بر می آید از مزایای CLR مانند اختصاص حافظه به صورت پویا، بهره مند هستند، به علاوه دارای قابلیت ها و توابع از پیش نوشته شده ای هستند که برای آرایه های معمولی C++ در دسترس نیستند. حافظه مورد نیاز برای برنامه ها در بخش هایی از حافظه که اصطلاحا heap نامیده می شوند اختصاص می یابند. CLR برای اختصاص حافظه به صورت پویا، پاک سازی و مدیریت حافظه از یک heap مستقل از C++ بومی، به نام Garbage-Collection heap استفاده می کند.

آرایه های CLR از انواع مدیریت شده ی هستند و در برای استفاده از آنها باید از روش برنامه نویسی مدیریت شده یا C++/CLI استفاده کنید. برای تخصیص حافظه در C++/CLI از کلمه کلیدی "gcnew" (به جای "new" ) استفاده می کنیم. gc نشان دهنده ی استفاده از garbage collection است. برای استفاده از پشتیبانی CLR در برنامه باید در تنظیمات پروژه، گزینه ی common Language runtime support را بر روی "استفاده از CLR " قرار دهید.


برای اعلان یک آرایه ی CLR از کلمه ی کلیدی array استفاده می کنیم. خط زیر یک آرایه ی CLR به نام "NAME" ، از نوع صحیح (int) اعلان می کند.

array < int >^ NAME;

ابتدا کلمه ی کلیدی array برای مشخص کردن آرایه ی CLR ، سپس نوع آرایه در بین دو علامت <> ، سپس عملگر ^ و بعد از آن نام آرایه آمده است. همان طور که می بینید تعریف آرایه CLR متفاوت از آرایه های Native است. این کلی ترین حالت اعلان یک آرایه CLR است که یک متغیر از نوع آرایه یک بعدی را تعریف می کند. البته کار ما تمام نشده است، ما تنها متغیری به نام NAME ایجاد کرده ایم که می تواند ارجاع برای یک آرایه ی یک بعدی را ذخیره کند. اگر در این حالت برای مثال بخواهیم آن مقدار دهی کنیم یا از توابع یا خواص مربوطه استقاده کنیم، کامپایلر از ما خطا خواهد گرفت. قبل از این کار باید یک نمونه ی جدید از این نوع را ایجاد کنیم؛ با استفاده از عملگر gcnew می توان آرایه را در هنگام اعلان، ایجاد کرد.

array < int > ^ NAME = gcnew array < int > (20);

طرف چپ = اعلان آرایه و طرف راست ایجاد یک نمونه جدید از آن آرایه با 20 خانه است. علامت (^) که بعد از نوع آرایه آمده نشان دهنده ی این است که NAME یک نوع اشاره گر به یک شی از نوع تعریف شده است. حالا ما آرایه ای از نوع int تعریف کرده ایم که دارای 20 عنصر است. بسیاری از قواعد کلی در مورد آرایه ها معمولی در مورد این آرایه های نیز صادق است مانند شروع ایندکس از 0 و .. ولی نکته ای که باید بدانید این است که آرایه های CLR از انواع مدیریت شده ی C++ هستند و نمی توانند انواع مدیریت نشده مانند std::string ، CString یا ... را قبول کنند.
حالا ببینیم یک آرایه ی چند بعدی CLR را چگونه تعریف می کنیم. تعریف و کار کردن با انها کمی متفاوت از آرایه های معمولی است.

array < int , 2 >^ NAME = gcnew array < int , 2 > (10,20);

در خط بالا یک آرایه دو بعدی به ابعاد 10 در 20 تعریف کرده ایم. میتوان آن را به صورت یک ماترس 10 در 20 تصور کرد. عدد 2 در کنار نوع آرایه مشخص می کند که NAME یک آرایه دو بعدی خواهد بود و در اخر کد نیز اندازه ی این ابعاد مشخص شده است. پس برای تعریف یک آرایه n بعدی، تعریف به صورت در می آید. در کنار نوع آرایه تعداد ابعاد آن مشخص می شود. دسترسی به خانه های این آرایه شبیه به آرایه های معمولی است ولی نحو آن کمی تفاوت دارد.

NAME [0,2] = 200;

در خط بالا مقدار 200 به خانه ی سوم از خانه ی اول آرایه اختصاص داده شده است. (دقت کنید که هر کدام از 10 خانه ی آرایه ی NEME خود یک آرایه ی 20 خانه ای است). NAME [0,2] را میتوان همچنین به صورت "ستون سوم از ردیف اول" یک ماترس تصور کرد.
توابع و خواص مختلفی برای آرایه های CLR ایجاد شده است که می توانید آنها را در سایت های مختلف مانند MSDN ، یا بخش Object Browser برنامه ی Visual Studio یا بخش Documentation پیدا کنید. خواصی مانند Length که طول یک آرایه را به صورت یک عدد 32 بیتی برمی گرداند، یا تابعی مانند Clear که مقدار صفر را به عناصر آرایه اختصاص می دهد. در پست های بعد برخی از این توابع را بررسی می کنیم.