当使用外部库中的功能时,任意'是否安全?取消引用指向const引用?
SomeType const& obj = *LIB_CreateSomething();
这样做是否普遍安全/聪明? 更重要的是,真的有一个很好的理由来做这个,而不是使用一个常量指针以外的常量指针。在C ++中?
答案 0 :(得分:1)
这当然不是普遍的好主意,或者通常是一个好主意。如果函数返回一个指针,特别是如果它调用了类似CreateX的东西,则很有可能需要管理指针所指向的东西的生命周期。你不能通过引用来做到这一点,但你可以通过智能指针。
通常,您不希望创建引用变量。 C ++中的引用主要用作函数参数和返回值。
答案 1 :(得分:1)
您真正想做的事情如下(见代码)。 Const对象在创建时初始化。有些编译器了解你要做什么,不要抱怨这种形式的任务。
SomeType const& obj(*LIB_CreateSomething());
通常在C ++中,你不会这样做。
一个原因是' raw'当你是主人时,(裸体)指针真的很不受欢迎。如果它不属于你,那么在风格上使用指针没有任何问题。
另一个是指针可能为null并且直接向引用强制转换NULL将使引用无法使用。
正如另一条评论中提到的,您实际上可能是所有者,在这种情况下,您需要管理内存。你不能用引用来做到这一点。