ועדיין
לא ראיתי שום דבר שונה בין JAVA לבין שימוש במצביעים ב-C, מלבד העובדה שיש GC, שמטפל בפינוי הזיכרון. אולאאאאאאיייי הבדל נוסף, הוא העובדה שלמצביע אתה עלול להציב ערך זבל (או שאתה שוכח לאתחל אותו או משהו כזה), וב-JAVA אתה עובד *רק* עם REFS, אז הם תמיד חוקיים. באופן אישי, אני אכן רואה את הפוטנציאל לבאגים פה, אבל בשום אופן אני לא חושב שאלו באגים חמורים, כמו בעיות בלוגיקה, בעיות ב-MT וכו´. ולכן אני בחהלט חושב שזהו כלי ששווה לתכניתן להתעסק איתו, כי במקרים מסויימים, השליטה בקוד חשובה יותר מזמן הפיתוח שלו. סתם בשביל הקטע, סיפור קצר וחצי-קשור: לפני הרבה זמן, פיתחתי כחלק מצוות, מודול שפונה ל-DB. אני טענתי שצריך להשתמש ב-RECORDSETS, ואילו מישהו אחר בצוות טען שפשוט צריך לבצע קריאות ישירות ל-CDatabase;:ExecuteSql. אני אמרתי ש-RECORDSETS עובדים יותר מהר, ואילו הוא טען שלא יתכן, בשני במקרים יש בסוף קריאה לפונקציית ה-ODBC API שנראת SqlExecute. ולכן מעטפת ה-CLASS של RECORDSETS רק מעיקה על הביצועים ועל קריאות הקוד. כמובן שהוא טעה. כי אמנם RECORDSETS קוראים ל-SQLEXECUTE, אבל לא באותה הדרך. CDatabase::ExecuteSQL מבצע PREPERATION ו-BINDING למחרוזת שהועברה אליו. זה אומר שעל כל מחרוזת שאתה שולח אליו, הוא מבצע PARSING מחדש. לעומת זאת, RECORDSET, מבצע פעם אחד את ה-PARSING בזמן ה-INIT. אין קריאה ל-SQLEXECUTE עם מחרוזת, אלא עם מבנה נתונים שהוא תוצר של תהליך ה-PARSING. כתבתי תוכנית קטנה, שהראתה ש-RECORDSET עובד פי 4.17 יותר מהר באיטרציה של SELECTS מאשר קריאות ל-CDatabase::ExectueSql. מה שמוכיח, שלא תמיד השימוש בפונקציות, שלוקחות את השליטה ממך ועושות כל מיני דברים לבד, הן המתאימות יותר לדרישות שלך. במקרה הזה היתה פגיעה חמורה (417%) בביצועים.