Avatar ·

لماذا من الأفضل في C++ تمرير الكائنات عبر المؤشر بدلاً من القيمة؟

مرحباً بالجميع! لقد بدأت للتو في تعلم C++ بعد Java، وواجهت سوء فهم مع المؤشرات. في Java، عندما أكتب `MyClass obj = new MyClass()`، أعمل دائماً مع مرجع للكائن. لكن في C++ يمكنني كتابة `MyClass obj;` وكذلك `MyClass* obj = new MyClass();`. وهنا أضيع. لنفترض أن لدي دالة تأخذ كائناً وتفعل شيئاً به: ```cpp void processData(MyClass data) { // نغير data data.setValue(42); } int main() { MyClass myObj; myObj.setValue(10); processData(myObj); // myObj.getValue() لا يزال 10، وليس 42! لماذا؟ return 0; } ``` توقعت أنه بعد استدعاء `processData` ستتغير القيمة، لكن هذا لم يحدث. اضطررت لإعادة الكتابة باستخدام المؤشرات: ```cpp void processData(MyClass* data) { data->setValue(42); } int main() { MyClass* myObj = new MyClass(); myObj->setValue(10); processData(myObj); // الآن myObj->getValue() == 42 delete myObj; return 0; } ```