混合转换指针和引用



我有代码:

Widget& Widget::GetWidget() const {
auto pWidget = dynamic_cast<Widget*>(pBaseWidget);
assert(pWidget != nullptr);
return *pWidget;
}

_pBaseWidget是派生Widget的类型BaseWidget*

_pBaseWidget在此范围之外有效。代码工作正常,行为符合预期。

但是,我觉得返回对强制转换的本地指针指向的某些数据的引用很奇怪。

在这里混合转换指针和引用是否安全?

在这里混合转换指针和引用是否安全?

混合引用和指针本身并没有什么"不安全"。

据推测,_pBaseWidget是一个指针。如果它是一个指针,则不能将其动态转换为引用。但是函数的作者想要(或需要(返回引用,因此他们间接通过指针。

但是,我觉得返回对...

返回引用通常比返回指针更可取。它免除了调用方检查返回的指针是否为 null 的责任。

是的,它是安全的(只要任何使用原始指针的东西都是安全的(。

您只是返回对_pbaseWidget指向的任何内容的引用,首先验证它实际上指向Widget。 返回的引用将保持有效,直到_pbaseWidget指向的任何内容超出范围。

最新更新