可能重复:
在C++中取消引用指针有多贵?
如果我有一个指向对象的指针,那么Object *ptr;我想把它传递给void foo(Object& obj)我理解我需要编写的形式的方法:
foo(*ptr);
Run Code Online (Sandbox Code Playgroud)
但为什么要解除引用ptr?通过它不是没有意义foo(ptr);吗?我担心*ptr可能会制作原始对象的副本,或者至少不仅仅是传递到foo地址来使用.
任何人都可以为我清除这个吗?是否传递*ptr了一个潜在的瓶颈,因为代码期望这个代码表现得像函数一样快void foo(Object *obj);并且通过调用foo(ptr)?
Naw*_*waz 12
我担心*ptr可能正在复制原始对象.
你错了.取消引用指针不会进行任何复制!
void f(Object & obj); //note it takes the argument by reference
Object *ptr = get();
foo(*ptr);
Run Code Online (Sandbox Code Playgroud)
在此代码的最后一行没有副本.标准为您提供保证.
然而,如果f需要的参数通过值,那么会复制.
底线:函数参数中的引用用于避免复制(通常)或作为输出参数(偶尔)!
Dev*_*lar 12
传递*ptr是否复制取决于被调用函数是否需要一个Object或一个Object &.
在前一种情况下,将制作一份副本.在后一种情况下(即您的情况),不会复制.