我是C ++的新手,我对涉及指针/参考的概念感到困惑
如果我有像
这样的功能void func(classA *&size) {
//this is the part I don't understand what to do
}
如果尺寸有宽度和长度,我将如何改变长度? (基本上使用*&修改对象)
答案 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);
因为现在意图和语义被混合到接口中。呼叫者现在无法滥用该功能(除非故意自残)。