بسم الله الرحمن الرحيم
السلام عليكم اخواني الاعضاء الكتاب باين من عنوانه اللي ابي فقط شرح مبسط لل
new operator
في المؤشرات ايش الهدف منها مع برنامج بسيط ايتخدمت فيه الانسة نيو اوبريتور
وشكرا لكم
تحياااااااااااتي 11
بسم الله الرحمن الرحيم
السلام عليكم اخواني الاعضاء الكتاب باين من عنوانه اللي ابي فقط شرح مبسط لل
new operator
في المؤشرات ايش الهدف منها مع برنامج بسيط ايتخدمت فيه الانسة نيو اوبريتور
وشكرا لكم
تحياااااااااااتي 11
يارب التأهل ياكريم
ok
انا بحثت ايضا وحصلت على الروابط التالية لكن ابي منكم شرح بالعربي علشان تثبت المعلومة
فقط في هذا الموضوع
الروابط
http://publib.boulder.ibm.com/infocenter/m...rc05cplr199.htm
http://msdn2.microsoft.com/en-us/library/k...8ba(VS.71).aspx
تحياااااااااااتي11
يارب التأهل ياكريم
هلا اخوي
عند استخدام NEW فهذا يعني انك قمت بحجز موقع على الذاكرة يشير لما حجزت له مثلا
اذا فرضنا انه عندك class اسمه Man
Man m = new Man();
فوق عملنا فقط انشاء ل Object واستدعينا ال Default Constructor
هذا ال Object الجديد له موقع على الذاكرة , هذا الموقع تم حجزه من قبل ال new operator
ولن يتم تحرير الذاكرة الا اذا استخدم ال Delete Operator حينها فقط سوف يتم تحرير المساحة التي تم حجزها من قبل ال New Operator
كذلك لا يتم استخدام ال Delete Operator الا اذا استخدم ال New Operator
ارجو ان تكون الصورة واضحة الآن.... مستعد لأي شرح اضافي
اخوك
ابوكارليتو
بسم الله الرحمن الرحيم
شكرا اخي ابو كارليتو
لكن ليس اجباري اننا نستخدم new operator
لحجز مكان بامكاننا عمل كود اخر
int *p; p=&x; *p=11;
الذي اعنيه هل هناك حالات معينة يجب اننا نستخدم فيها ال
new operator
ام هي شي اختياري؟
تحياااااااااااتي11
يارب التأهل ياكريم
الذاكره عاده تقسم الى عده مناطق ، أهمها المكدس Stack ، والHeap (هناك من يترجمها المخزن الحر ، او الذاكره الحره ، والخ من الترجمات) .
عندما نتعامل مع الكائنات و نضعها في الـ Heap وهنا يكون لدينا مؤشر للكائن الموجود في الذاكره Heap ،ونستطيع ارسال هذا المؤشر الى داله وارجاعه أيضا ...
أما عندما نضع الكائن في الStack ، معناه أولا سوف يكون محصور على الداله التى عرفناها فيه Local Object . وعند أنتهاء الداله سوف يخرج هذا الكائن ويتم استدعائ داله الهدم الخاصه به .
Object* ptr = new Objct();
هنا أنشائنا كائن في الذاكره Heap ، ولدى ptr مؤشر لهذا الكائن .
Object object1;
هنا أنشأنا كائن في الـ Stack ، وسوف يتم انهاء هذا الكائن بمجرد انتهاء عمل الداله .
والمثال الذي أرففته في الأخير ، ليس لحجز مكان كما ذكرت ، وأنما لجعل ptr يؤشر الى x .
الذي اعنيه هل هناك حالات معينة يجب اننا نستخدم فيها الnew operator ام هي شي اختياري؟
اذا كنت مصمم البرنامج فقط داله main ، وليس به دوال ، فلا يوجد ضير من وضع الكائن في الStack أو في الـ Heap . أما اذا كانت هناك دوال وارسال وارجاع كائنتات وأمور مثل هذه ، فهذا سوف يعتمد من وضع لأخر ومن حاله لأخرى .
يمكنك النظر لموضوع أخ خالد :
متى نرسل الكائن أو نرجعه من أحد الدوال By Reference أو By Value
وستجد ما يفيدك ...
بالتوفيق .
تم تعديل هذه المشاركة بواسطة romansy في 24 مارس 2008 في 19:52
http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة
https://moalfat.com للكتب الالكترونية والكورسات التعليمية
Everything we see now is just an engineering solution based on old science
اخي ذابح.
على حسب معلوماتي ليس من الضروري استخدام الكلمه المحجوزه New فهي ليست الزاميه .
وانما تعتبر افيد واكثر اهميه في البرامج الكبيره بحيث يتم الحجز فقط عند تنفيذ البرامج اي عند عملية ال run
مع التحيه
السلام عليكم,
هنالك ملاحظة أرغب في ذكرها... ذاكرة الـ Stack (أي بدون إستخدام new) هي أسرع للإستخدام, ولكنها محدودة الحجم. لذلك فإن إستخدامها للبيانات ذات الحجم المحدود مفضل ولكن إن أردت أن تنشأ مصفوفة بـ 10000 عنصر مثلاً.. فإن إستخدامها قد ينهي ذاكرة الـ Stack المحددة لبرنامجك من قبل نظام التشغيل, مما قد يدخلك في مشاكل جدية.
أما الذاكرة الديناميكية (الحرة Heap) فإنها من ناحية السرعة تكون أبطأ للحجز (بسبب إن نظام التشغيل سيقوم بحجز الذاكرة أثناء تشغيل البرنامج) ولكنها مناسبة أكثر لحجز أحجام كبيرة من الذاكرة. مثل 10000 عنصر في مصفوفة كما ذكرت.
وهنالك أيضاً نقطة أخرى, وهي إن حجز الذاكرة بإستخدام new ثم عدم تحريرها بإستخدام delete يسبب حالة تسمى بتسرب الذاكرة Memory Leak, قد لا تسبب مشكلة حقيقية في البرامج ذات الحجم الصغير, ولكن في البرامج الكبيرة (أو البرامج التي تتعامل مع بيانات كبيرة) فإنها بالتأكيد تسبب مشاكل, ولكن تذكر إن الذاكرة تتسرب فقط أثناء تنفيذ برنامجك... بمجرد غلقه يقوم نظام التشغيل بتحرير كل الذاكرة المعنونة لبرنامجك ومن ضمنها الذاكرة المتسربة...