此示例中使用取消引用运算符 (c++)

Use of dereference operator in this example (c++)

本文关键字:运算符 引用 c++ 取消      更新时间:2023-10-16

我不明白为什么在这个例子中,我不能通过取消引用对象来访问成员函数

这是代码的相关部分

class Search
{
public:
void run();
private:
Result* result;
Result* extractResults()
};

extractResults() 定义如下

Result* Search::extractResults()
{
Result* ris;
//as soon as i know the size, i initialize ris
ris = new Result[numOfResults];
return ris;
}

在 run() 函数中,我调用 extractResults 来获取指向内部 ris 对象的指针

result = extractResults();

现在,我希望能够在run()中访问"result"对象,如下所示:

result[4]->doSomething();

但是它不起作用,我必须使用

result[4].doSomething();

为什么?

编辑

好的,我修改了代码以便能够使用取消引用运算符。我知道在这种情况下没有必要使用指针,我只是将其用作练习。

class Search
{
public:
void run();
private:
Result** resultPP;
Result* resultP;
Result* extractResults()
};
Result* Search::extractResults()
{
Risultato* ris;
//as soon as i know the size, i initialize ris
ris = new Risultato[numOfResults];
return ris;
}

在 run() 函数内部

resultP = extractResults();
resultPP = &resultP;

现在我终于可以做到了:

resultPP->doSomething();

我知道这很混乱,我只是想这样做,作为一种学习方式。谢谢!

result是指向Risultato数组的指针。因此,result 中的对象实际上是值类型。如果您确实想使用取消引用运算符,则必须将result声明为指向Resultato的指针数组的指针。我希望这有所帮助。