لماذا من الأفضل في 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;
}
```