کاربرد std::get_temporary_buffer - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۴۶۳ نفر آنلاین
۲۲۵ عضو و ۲۳۸ مهمان در سایت حاضرند

کاربرد std::get_temporary_buffer

0 امتیاز
این get_temporary_buffer با new معمولی چه تفاوتی داره ؟

چرا برای نوشتن allocator استفاده میشه ؟ مزیتی داره نسبت به new ؟

یک مثال از نحوه استفاده هم لطفا بزنید
سوال شده دی 30, 1393  بوسیله ی PSPCoder (امتیاز 1,301)   14 40 57

1 پاسخ

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

get_temporar_buffer یک حافظه موقت بدون مقدار اولیه و صدا زدن سازنده کلاس  برای ما می گیره.

تفاوتی که با new داره اینه که در صورت نبود حافظه کافی new یک exception برمیگردونه و در صورت catch نشدن برنامه بسته میشه ولی این تابع هر قدر که امکان باشه (یعنی کمتر از مقدار مورد نیاز )حافظه  بر میگردونه . و به عنوان نمونه برای ساختن memory pool میتونه مورد استفاده قرار بگیره .

خروجی این تابع یک pair از حافظه برگشت داده شده به همراه سایز هست 

مثال :

#include <iostream>
#include <string>
#include <memory>

int main() {
	const ptrdiff_t size = 100000000;
	std::pair<std::string*,std::ptrdiff_t> mem=std::get_temporary_buffer<std::string>(size);
	if (mem.second==0){//hafeze natoneste begire
		std::cout << "Can not allocate memory\n";
	}
	else if (mem.second < size){//memory be anaze kafi gerefte nashode
		std::cout << "Not enough memory Just allocate : "<<mem.second<<"\n";
		//use mem.first
		//...
		std::return_temporary_buffer<std::string>(mem.first);
	}
	else{//hafeze be dorosti gerefte shode
		std::cout << "Memory allocation was successful\n";
		//use mem.first
		//...
		std::return_temporary_buffer<std::string>(mem.first);
	}
}

 

پاسخ داده شده بهمن 1, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد بهمن 3, 1393 بوسیله ی PSPCoder
...