将指针转换为(常量)引用
Converting pointers to (const) references
当使用外部库中的函数时,将"任意"取消引用指针"取消引用到常量引用中是否安全?
SomeType const& obj = *LIB_CreateSomething();
这是普遍安全/明智的做法吗?
更重要的是,除了在C++中"皱眉"原始指针之外,真的有充分的理由
这当然不是一个普遍的好主意,或者通常根本不是一个好主意。如果一个函数返回一个指针,特别是如果它调用了类似 CreateX 的东西,那么你很有可能需要管理指针指向的事物的生存期。您无法通过引用执行此操作,但可以通过智能指针执行此操作。
通常,您不希望创建引用变量。C++中的引用主要用作函数参数和返回值。
你真正想做的是下面这样的事情(见代码)。Const 对象在创建时初始化。一些编译器了解您要做什么,并且不会抱怨这种形式的赋值。
SomeType const& obj(*LIB_CreateSomething());
通常,在C++中,您不会这样做。
一个原因是,只有当你是所有者时,"原始"(裸)指针才会真正皱眉。如果它不属于你,那么从风格上讲,使用指针并没有错。
另一个原因是指针可能为 null,将 NULL 直接强制转换为引用将导致引用不可用。
如另一条评论所述,您实际上可能是所有者,在这种情况下,您需要管理内存。您不能使用引用来执行此操作。
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- 通过常量引用传递参数的矩阵模板类
- 在C++中使用非常量引用作为常量
- 具有常量引用参数的函数模板专用化
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 为什么常量方法可以采用非常量引用?
- 为什么当我们有常量引用时创建临时对象?
- 如何返回向量的常量引用?
- C++:常量引用参数
- 不同于按值传递和常量引用传递的程序集
- 为什么const_cast和static_cast常量引用没有效果?
- C++ 获取函数在常量引用中按值返回的结果
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 通过非常量引用参数修改常量引用参数
- 将常量引用传递给线程
- 为什么C++中没有常量引用,就像常量指针一样?