可能是重复问题:
在C++中解引用指针的代价有多大?
如果我有一个指向对象的指针,比如说Object *ptr;
,并且我想将它传递给形式为void foo(Object& obj)
的方法,我理解我需要编写:
foo(*ptr);
为什么要取消引用ptr
呢?直接传递foo(ptr);
不是更合理吗?我担心*ptr
会复制原始对象,或至少不仅仅将地址传递给foo
。
有人能帮我解决这个问题吗?对于期望此行为与使用void foo(Object *obj);
并通过foo(ptr)
调用的函数相同快速执行的代码来说,传递*ptr
是否可能成为瓶颈?
Object a = *ptr;
解除引用会导致一份副本(正如我所预期的那样),但是通过Object &a = *ptr;
解除引用不会导致一份副本吗?有趣。 - Mr. Smithptr
是一个指向对象的指针,*ptr
是所指向的对象。在这一点上,没有人需要复制。将*ptr
赋值给另一个对象 (Object a
) 需要进行复制。引用原始对象(通过Object &a
)则不需要复制。 - DevSolar*ptr
分配给另一个对象需要进行复制,因为之后你会有两个对象。引用原始对象不需要复制,因为你仍然只有那一个对象。(这也是为什么解引用指针本身并不昂贵的原因。) - DevSolar