আমি আরও কিছু বিশদ যুক্ত করব। অন্তর্নিহিত অ্যারে 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
।