في C ++ ، هل من الآمن تمديد النطاق عبر مرجع؟
سؤال
في 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: نقرة
لا تنتمي إلى StackOverflow