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

3
当使用外部库中的函数时,是否可以“任意”将指针解引用为const引用?
SomeType const& obj = *LIB_CreateSomething();

这样做普遍安全/明智吗?更重要的是,除了在C++中原始指针“不受欢迎”之外,是否真的有充分的理由使用这种方法而不是使用const指针?


首先检查指针不是空指针。 - Paul Rooney
你希望通过这样做获得什么? - Mikel F
@MikelF 不知道,我的问题真的是那么基础。 - UghSegment
@UghSegment 我问这个问题是因为根据您的需求,可能有一些选项可以满足您的需求。 - Mikel F
考虑这个线程:https://dev59.com/R1wX5IYBdhLWcg3w2Shr - Mikel F
有时候我会用这个技巧,当我懒得打 "->" 时,可以通过写 "." 来代替(如果需要多次这样做),因为我相信这将编译成完全相同的指令。 - Martijn Courteaux
2个回答

1
这绝对不是普遍的好主意,或者根本就不是好主意。如果一个函数返回一个指针,特别是如果它被称为CreateX之类的东西,那么你需要管理指针所指向的东西的生命周期的机会很大。你不能通过引用来做到这一点,但可以通过智能指针来实现。
通常情况下,你不想创建引用变量。在C++中,引用主要用于函数参数和返回值。

1
你真正想做的是像下面这样(见代码)。Const对象在创建时初始化。一些编译器理解你试图做什么,并不会抱怨这种赋值形式。
    SomeType const& obj(*LIB_CreateSomething());

通常在C++中,你不会这样做。
一个原因是“裸”(裸露)指针只有在你是所有者时才会真正被反对。如果它不属于你,那么从风格上讲,使用指针没有任何问题。
另一个原因是指针可能为空,将NULL直接转换为引用将使引用无法使用。
如另一条评论中所提到的,你可能实际上是所有者,在这种情况下,你应该管理内存。你不能用引用来做到这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接