سؤال

هذه هي الطريقة لإنشاء متغير في كومة كومة C ++:

T *ptr = new T;

يشير PTR إلى مؤشر إلى T الجديد، من الواضح. سؤالي هو، هل يمكنك القيام بذلك:

T *ptr = new T*;

يبدو أنه قد يؤدي إلى بعض الكود الخطير للغاية. هل يعرف أحد إذا كان هذا ممكنا / كيفية استخدامه بشكل صحيح؟

هل كانت مفيدة؟

المحلول

int** ppint = new int*;
*ppint = new int;

delete *ppint;
delete ppint;

نصائح أخرى

new T* إرجاع مؤشر إلى مؤشر T. لذلك الإعلان غير صحيح، يجب أن يكون:

T** ptr = new T*;

وسوف يقيم على كومة الكومة.

نعم، يمكنك إعلان مؤشر إلى مؤشر ... ونعم، سيكون المؤشر على كومة الكومة.

وقد ذكر لماذا قد تحتاج إلى شيء مثل هذا. الشيء الذي يتبادر إلى الذهن هو صفيف ديناميكي. (معظم تطبيقات ناقلات تستخدم هذا في الواقع.)

// Create array of pointers to object
int start = 10;
SomeObject** dynamic = new SomeObject*[start];
// stuff happens and it gets filled
// we need it to be bigger
{
    SomeObject** tmp = new SomeObject*[start * 2];
    for (size_t x = 0; x < start; ++x)
        tmp[x] = dynamic[x];
    delete [] dynamic;
    dynamic = tmp;
}
// now our dynamic array is twice the size

نتيجة لذلك، نسخ مجموعة من المؤشرات لزيادة صفيفنا، وليس الكائنات نفسها.

لا يمكنك أن تفعل

T *ptr = new T*;

منذ عودة نوع new foo هو "مؤشر إلى فو" أو foo *.

يمكنك ان تفعل

T **ptr = new T*;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top