আমি জানি যেহেতু std::allocator<T>::construct
সি ++ এর পুরানো সংস্করণে মাত্র দুটি পরামিতি লাগে; প্রথমটি হ'ল কাঁচা, অ-নির্মাণকৃত মেমরির পয়েন্টার যা আমরা প্রকারের একটি অবজেক্ট তৈরি করতে চাই T
এবং দ্বিতীয়টি সেই বস্তুর প্রারম্ভিককরণের জন্য উপাদান টাইপের মান। সুতরাং অনুলিপি-নির্মাণকারীকে অনুরোধ করা হয়েছে:
struct Foo {
Foo(int, int) { cout << "Foo(int, int)" << endl; }
/*explicit*/ Foo(int) { cout << "Foo(int)" << endl; }
Foo(const Foo&) { cout << "Foo(const Foo&)" << endl; }
};
int main(int argc, char* argv[]) {
allocator<Foo> a;
Foo* const p = a.allocate(200, NULL); // second parameter is required on C++98 but on C++11 it is optional
// Foo* const p = a.allocate(200); // works fine on C++11 but not on C++98
a.construct(p, 5, 7); // works on C++ 11 and up but not C++98
a.construct(p, 10);// works on both
a.destroy(p);
a.destroy(p + 1);
a.deallocate(p, 200);
std::cout << std::endl;
}
কেন সি ++ 98
a.construct(p, 10)
অনুলিপি অনুলিপি কনস্ট্রাক্টর কিন্তু সি ++ 11 এবং উপরের দিকে কেবল ঠিক সেই কনস্ট্রাক্টরকে কল করছে যা একটি পূর্ণসংখ্যা লাগে?সি ++ উপর কিছু অনুলিপি বিলোপ অপ্টিমাইজেশান এমনকি যদি কন্সট্রাকটর কারণে 11 এর অর্থ কি এই
Foo(int)
নয়explicit
এমন কলে কাজ:a.construct(p, 5)
সি উপর কাজ করে ++, 11 এমনকি কন্সট্রাকটর হয়explicit
হয় এটা সি ++ 98 যদি কাজ করে কী আমি নিশ্চিতFoo(int)
হয়explicit
।যদি তা হয় তবে আমি যদি সেই বিবৃতিটি একরকম অক্ষম
copy-elision
অপটিমাইজেশন দিয়ে সংকলন করি তবে সংকলকটি ব্যর্থ হয়? ধন্যবাদ.