في C ++ ، هل من الآمن تمديد النطاق عبر مرجع؟

StackOverflow https://stackoverflow.com/questions/256724

  •  05-07-2019
  •  | 
  •  

سؤال

في C ++ ، هل من الآمن تمديد النطاق عبر مرجع؟

في الكود ، ما أعنيه هو:

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}
هل كانت مفيدة؟

المحلول

ليس من الآمن تمديد النطاق عبر المرجع. لا يتم إحضار الكائنات الموجودة في C ++ عندما يخرج OBJ1 من النطاق ، وسيتم حذفه ، مع الإشارة إلى نتيجة Badidea () لنقلك إلى مشكلة فقط

نصائح أخرى

المكان الوحيد الذي لا بأس في تمديد النطاق مع مرجع هو مع أ const إشارة في namespace أو نطاق الوظيفة (وليس مع أعضاء الفصل).

const int & cir = 1+1; // OK to use cir = 2 after this line 

يتم استخدام هذه الحيلة في أندريه ألكساندرسكو رائع جدا حارس النطاق من أجل التقاط أ const الإشارة إلى فئة قاعدة من حارس النطاق الخرساني.

يرجى توضيح ما تفعله.

على افتراض أنك تنوي القيام بذلك:

int * p = NULL;
{
  int y = 22;
  p = &y;
}
*p = 77; // BOOM!

ثم لا ، بالتأكيد لا ، لا يتم تمديد النطاق من خلال الإشارة.

قد ترغب في إلقاء نظرة على المؤشرات الذكية ، على سبيل المثال من مكتبات Boost: نقرة

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