【问题标题】:Converting pointers to (const) references将指针转换为 (const) 引用
【发布时间】:2017-01-24 00:22:28
【问题描述】:

使用外部库中的函数时,将指针“任意”解引用到 const 引用是否安全?

SomeType const& obj = *LIB_CreateSomething();

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

【问题讨论】:

  • 先检查指针不为空。
  • 您希望通过这样做获得什么?
  • @MikelF 不知道,我的问题确实是那个基本的。
  • @UghSegment 我问是因为有一些选项可以根据您的需要满足您的需求。

标签: c++ pointers reference


【解决方案1】:

这当然不是一个普遍的好主意,或者根本不是一个好主意。如果一个函数返回一个指针,特别是如果它调用了 CreateX 之类的东西,那么您很有可能需要管理指针指向的对象的生命周期。你不能通过引用来做到这一点,但你可以通过智能指针。

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

【讨论】:

    【解决方案2】:

    您真正想做的是如下所示(请参阅代码)。 const 对象在创建时被初始化。一些编译器理解你想要做什么,并且不会抱怨这种形式的赋值。

    SomeType const& obj(*LIB_CreateSomething());

    但通常在 C++ 中你不会这样做。

    一个原因是“原始”(裸)指针只有在您是所有者时才真正不受欢迎。如果它不属于你,那么在风格上使用指针没有任何问题。

    另一个是指针可能为空,将 NULL 直接转换为引用会导致引用不可用。

    正如另一条评论中提到的,您实际上可能是所有者,在这种情况下,您需要管理内存。你不能通过参考来做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-20
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 2013-11-23
      相关资源
      最近更新 更多