آزاد سازی خودکار char* - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

آزاد سازی خودکار char*

0 امتیاز

سلام.آیا تو c++11 امکانش هست که بتونه یک رشته char* را به صورت خودکار آزاد کنیم.یعنی وقتی داخل یک تابع براش حافظه اشغال میشه در کدی که تابع را فراخوانی می کنه نیاز به delete نباشه خودش به صورت خودکار آزاد شه.

این تابع زیر :

const char * getStr(){
	char *str = new char[10];
	strcpy(str,"hello");
	return str;
}

کد فراخوانی :

const char* str = getStr();

 

سوال شده بهمن 13, 1392  بوسیله ی saleh110 (امتیاز 70)   2 11 16

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

بله .یکی از کاربردهای shared_ptr همین که بتونه از وقوع همچین نشت حافظه ای جلوگیری کنه. به مثال زیر دقت کنید دیگه نیازی نیست که حافظه اشغال شده را delete کنید با خروج از scope مورد نظر و ref count برابر صفر به صورت خودکار حافظه آزاد میشه.

std::shared_ptr<const char> str(getStr());

حالا اگر هم قصد داشته باشید متغیر str را به std::string تبدیل کنید می تونید به صورت زیر عمل کنید.

std::string std_str = str.get();

 

پاسخ داده شده بهمن 14, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد اسفند 15, 1392 بوسیله ی saleh110
...