繁体   English   中英

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

[英]how to modify an object using *& in C++

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

如果我有一个功能,如

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

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

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

size->length = 3;

如果size声明类型为classA*而不是classA*& ,则与你要编写的内容相同。

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

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

这段代码已经闻起来很糟糕了。 它实质上是共享指向对象的所有权,没有智能指针(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);

因为现在意图和语义被混合到接口中。 呼叫者现在无法滥用该功能(禁止故意的自我伤害)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM