将指针转换为(常量)引用

Converting pointers to (const) references

本文关键字:常量 引用 指针 转换      更新时间:2023-10-16

当使用外部库中的函数时,将"任意"取消引用指针"取消引用到常量引用中是否安全?

SomeType const& obj = *LIB_CreateSomething();

这是普遍安全/明智的做法吗?
更重要的是,除了在C++中"皱眉"原始指针之外,真的有充分的理由

这样做吗?

这当然不是一个普遍的好主意,或者通常根本不是一个好主意。如果一个函数返回一个指针,特别是如果它调用了类似 CreateX 的东西,那么你很有可能需要管理指针指向的事物的生存期。您无法通过引用执行此操作,但可以通过智能指针执行此操作。

通常,您不希望创建引用变量。C++中的引用主要用作函数参数和返回值。

你真正想做的是下面这样的事情(见代码)。Const 对象在创建时初始化。一些编译器了解您要做什么,并且不会抱怨这种形式的赋值。

    SomeType const& obj(*LIB_CreateSomething());

通常,在C++中,您不会这样做。

一个原因是,只有当你是所有者时,"原始"(裸)指针才会真正皱眉。如果它不属于你,那么从风格上讲,使用指针并没有错。

另一个原因是指针可能为 null,将 NULL 直接强制转换为引用将导致引用不可用。

如另一条评论所述,您实际上可能是所有者,在这种情况下,您需要管理内存。您不能使用引用来执行此操作。