从函数引用指针

时间:2014-04-18 06:54:10

标签: c++ pointers

我有代码(底部),如何保存对指针(对象TRequest)的引用,因为我必须将相同的对象(具有相同的地址)保存到其他函数。

void producent(const TRequest *(* dispatcher)( void )) {
    // ...
    const TRequest *& tmpRequest2 = *(dispatcher()); // that is bad
    // ...
}

2 个答案:

答案 0 :(得分:0)

你的tmpRequest2应该是const TRequest *类型。 (没有&符号并且不取消引用返回的值)因为您不想创建对刚刚从函数返回的指针的引用,这是一个临时的。它将是对非现有值的引用,因为实际值永远不会存储。简单地存储和使用引用的方法是指向这种情况下指针所指向的值的引用:

     const TRequest *tmpRequest2Ptr = (dispatcher());
     if (tmpRequest2Ptr != nullptr)
     {
         const TRequest & tmpRequest2 = *tmpRequest2Ptr;
         // do something with tmpRequest2
     }

答案 1 :(得分:0)

返回值(这里是一个const TRequest *)是临时的。您不应该将引用保存为临时。

三个选项:

  • 不要存储引用,而是直接存储指针
  

const TRequest * tmpRequest2 = *(dispatcher());

  • 更改调度程序的返回类型并返回对指针的引用。这意味着返回引用的实际指针必须存储在永久位置。
  

void producent(const TRequest *&(* dispatcher)(void)){

  • 将结果存储在指针(而不是ref指针)中并在其上创建引用(但在这种情况下,存储的指针必须保持有效)。我不认为这会解决你的问题,但这只是为了理解

    //tmpRequest2 must remain in scope during the use of tmpRequest3
    const TRequest * tmpRequest2 = *(dispatcher());
    const TRequest *& tmpRequest3 = tmpRequest2;
    

为什么不能简单地将指针发送到另一个函数?另一个函数是否需要修改指针或只是访问TObject?