如何使用*&修改对象在C ++中

时间:2016-11-27 08:17:36

标签: c++

我是C ++的新手,我对涉及指针/参考的概念感到困惑

如果我有像

这样的功能
void func(classA *&size) {
  //this is the part I don't understand what to do
}

如果尺寸有宽度和长度,我将如何改变长度? (基本上使用*&修改对象)

2 个答案:

答案 0 :(得分:0)

由于size是对classA*类型的引用,因此它表现为指向classA对象的指针的别名,并且可以与该对象的任何其他名称互换使用。因此,您可以修改指向的对象:

size->length = 3;

size声明类型为classA*而不是classA*&的内容相同。

答案 1 :(得分:0)

您描述的函数将指针引用作为参数。

这意味着该函数打算修改指针本身。

此代码已经闻起来很糟糕了。它实质上是共享指向对象的所有权,没有智能指针(unique_ptr,shared_ptr)引用提供的保护,也没有注释来指示此指针是观察者(请参阅即将发​​布的文档) -standard observer_ptr)。

您想知道在函数内部做什么。这得看情况。参数设置为将对象的地址传递给函数,并从函数中接收(可能不同的)对象的地址。

如果这是你想要的,你可能已经知道该怎么做了。

如果您只想传递对象的引用,则只传递引用。如果要传递指向对象的指针,只传递一个指针。

如果你真的想要传入一个指针并接收一个可能不同的指针,我建议该函数看起来应该更像这样:

classA* func(classA* a); // returns either a or another classA

更好的可能是:

std::unique_ptr<classA> func(std::unique_ptr<classA> a);

因为现在意图和语义被混合到接口中。呼叫者现在无法滥用该功能(除非故意自残)。