המשתנה הוא pT, טיפוסו הוא T*, וערכו
מאותחל להיות 0. אבל זהו ערכו של המשתנה
pT. הביטוי *pT איננו משתנה שהוגדר, ולכן אי אפשר לאתחל אותו. כנ"ל לגבי הקוד:
T* pT = malloc(N * sizeof(T));
גם כאן pT מאותחל לערך של הכתובת בה הוקצה הזיכרון ל"מערך" המבוקש, אבל
ה"מערך" שניתן לגשת אליו דרך *pT איננו משתנה שהוגדר בקוד, ואי-אפשר לאתחל
אותו. גם אם פתאום נשתמש ב-new במקום ב-malloc זה לא ישתנה:
T* pT = new int[N];
pT הוא משתנה, ואנחנו
מאתחלים אותו. *pT זה מקום כלשהו בזיכרון שהוקצה עבורנו,
כתובות נרשמה ב-pT, אבל הוא עצמו איננו משתנה שהוגדר בקוד, ואי אפשר לאתחל אותו.
וכך, פעם נוספת - אי אפשר לאתחל "מערך" דינאמי כזה שהשואל דיבר עליו. הדרך
הנכונה לאתחל מערכים היא להשתמש במחלקה שמייצגת מערך. למזלנו, מעצבי השפה
חשבו על המשתמשים בה, וכבר כתבו מחלקה כזאת. היא נקראת std::vector.
ואגב, השואל לא שאל על מערך אמיתי. מערך אמיתי ב-C++ ניתן גם ניתן לאתחל:
int arr[5] = {1,2,3,4,5};
חבל שסתם זיכרון שניתן לגשת אליו בעזרת הקיצור לאריתמטיקת-מצביעים שמאפשר
האופרטור [] איננו באמת מערך.