C++11-এ introdujo nullptr - একটি টাইপ-সেফ নাল পয়েন্টার লিটারেল। পুরানো `NULL` (সাধারণত `#define NULL 0` বা `(void*)0`) এর সমস্যা সমাধান করে।
NULL-র সমস্যা: অ্যাম্বিগুইটি
void func(int n) { cout << "int overload"; }
void func(char* ptr) { cout << "char* overload"; }
int main() {
func(NULL); // Error: ambiguous! NULL হলো 0 (int) বা (void*)0
}
nullptr-র সমাধান
int main() {
func(nullptr); // OK: char* overload কল হয়
// nullptr_t টাইপ, যেকোনো পয়েন্টার টাইপে ইমপ্লিসিট কনভার্ট হয়, কিন্তু ইন্টিগার টাইপে নয়
}
আউটপুট
calling function my_func(char *)
nullptr-এর বৈশিষ্ট্য
- টাইপ:
std::nullptr_t(প্রিন্ট করতেtypeid(nullptr).name()) - যেকোনো পয়েন্টার টাইপে ইমপ্লিসিট কনভার্ট হয় (`int*`, `char*`, `MyClass*`, `void*` ইত্যাদি)
- ইন্টিগার টাইপে (int, long, bool) কনভার্ট হয় না
- বুলিয়ান কনটেক্সটে `false`-এ কনভার্ট হয়
- সাইজ: পয়েন্টার সাইজের সমান (৪ বা ৮ বাইট)
সেরা অনুশীলন
- সর্বদা `NULL` বা `0` এর বদলে `nullptr` ব্যবহার করুন।
- স্মার্ট পয়েন্টার (
unique_ptr,shared_ptr) ডিফল্ট কনস্ট্রাক্টরে `nullptr` ধারণ করে। - টেমপ্লেট কোডে `nullptr` ব্যবহার করলে টাইপ ডেডাকশন সঠিক হয়।