[英]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.