我有代码:
Widget& Widget::GetWidget() const {
auto pWidget = dynamic_cast<Widget*>(pBaseWidget);
assert(pWidget != nullptr);
return *pWidget;
}
_pBaseWidget
是派生Widget
的类型BaseWidget*
。
_pBaseWidget
在此范围之外有效。代码工作正常,行为符合预期。
但是,我觉得返回对强制转换的本地指针指向的某些数据的引用很奇怪。
在这里混合转换指针和引用是否安全?
在这里混合转换指针和引用是否安全?
混合引用和指针本身并没有什么"不安全"。
据推测,_pBaseWidget
是一个指针。如果它是一个指针,则不能将其动态转换为引用。但是函数的作者想要(或需要(返回引用,因此他们间接通过指针。
但是,我觉得返回对...
返回引用通常比返回指针更可取。它免除了调用方检查返回的指针是否为 null 的责任。
是的,它是安全的(只要任何使用原始指针的东西都是安全的(。
您只是返回对_pbaseWidget
指向的任何内容的引用,首先验证它实际上指向Widget
。 返回的引用将保持有效,直到_pbaseWidget
指向的任何内容超出范围。