POD (Plain Old Data): এমন ক্লাস/স্ট্রাক্ট যেটিতে শুধু মেম্বার ভেরিয়েবল থাকে - কোনো ইউজার-ডিফাইনড কনস্ট্রাক্টর, ডিস্ট্রাক্টর, ভার্চুয়াল ফাংশন, বেস ক্লাস, প্রাইভেট/প্রোটেক্টেড নন-স্ট্যাটিক মেম্বার নেই।
POD উদাহরণ
struct MyStruct {
int key;
string data; // C++11-এ std::string নন-POD, তাই এটি POD নয়
};
// সঠিক POD:
struct PodStruct {
int key;
double value;
char buffer[10];
};
Aggregate
এরে বা এমন ক্লাস যেটিতে:
- ইউজার-ডিক্লেয়ারড কনস্ট্রাক্টর নেই
- প্রাইভেট/প্রোটেক্টেড নন-স্ট্যাটিক মেম্বার নেই
- বেস ক্লাস নেই
- ভার্চুয়াল ফাংশন নেই
POD এবং Aggregate পার্থক্য
সব POD হলো Aggregate, কিন্তু সব Aggregate POD নয়। POD হতে হলে অতি হবে:
- ইউজার-ডিফাইনড কপি অ্যাসাইনমেন্ট অপারেটর নেই
- ইউজার-ডিফাইনড ডিস্ট্রাক্টর নেই
- নন-স্ট্যাটিক মেম্বাররা সব POD টাইপের হবে
উপযোগিতা: POD টাইপগুলো C-র সাথে কম্প্যাটিবল, মেমরি লে আউট প্রেডিক্টেবল, memcpy/memmove দিয়ে কপি করা যায়।