আমি আরও কিছু বিশদ যুক্ত করব। অন্তর্নিহিত অ্যারে std::initializer_listঅস্থায়ী হিসাবে একই ধরণের আচরণ করে। নিম্নলিখিত শ্রেণীর বিবেচনা করুন:
struct X
{
X(int i) { std::cerr << "ctor\n"; }
~X() { std::cerr << "dtor\n"; }
};
এবং নিম্নলিখিত কোডটিতে এর ব্যবহার:
std::pair<const X&, int> p(1, 2);
std::cerr << "barrier\n";
এটি প্রিন্ট আউট
ctor
dtor
barrier
যেহেতু প্রথম লাইনে, টাইপের একটি অস্থায়ী উদাহরণ Xতৈরি করা হয় (কনস্ট্রাক্টর থেকে রূপান্তর করে 1) এবং ধ্বংসও হয়। এতে সঞ্চিত রেফারেন্সটি pতখন ঝোলা।
যেমন std::initializer_list, আপনি যদি এটি এভাবে ব্যবহার করেন:
{
std::initializer_list<X> l { 1, 2 };
std::cerr << "barrier\n";
}
তারপরে, অন্তর্নিহিত (অস্থায়ী) অ্যারে যতক্ষণ না lপ্রস্থান হয় ততক্ষণ বিদ্যমান । সুতরাং, আউটপুট হয়:
ctor
ctor
barrier
dtor
dtor
তবে আপনি যদি স্যুইচ করেন
std::pair<std::initializer_list<X>, int> l { {1}, 2 };
std::cerr << "barrier\n";
আউটপুট আবার
ctor
dtor
barrier
অন্তর্নিহিত (অস্থায়ী) অ্যারে কেবল প্রথম লাইনে বিদ্যমান line lএরপরে উপাদানগুলিতে পয়েন্টারকে ডিফার করা হলে অপরিবর্তিত আচরণের ফলাফল হয়।
লাইভ ডেমো এখানে ।
std::pair।