3 ms·
I didn't quite "get" the point of the pointer/copy option on interfaces, but this makes it crystal clear. This works around such a common problem in writing C++
by matthavener 14y ago
I didn't quite "get" the point of the pointer/copy option on interfaces, but this makes it crystal clear. This works around such a common problem in writing C++ templates (which is really the only equivalent polymorphism if you want to dispatch a function on a native type):
template <class T> void doSomething(const T &expensiveCopy);
Versus:
template <class T> void doSomething(T cheapCopy);
As usual, boost provides another crazy template hack to work around this issue:
http://boost.sourceforge.net/libs/utility/call_traits.htm http://boost.sourceforge.net/libs/utility/call_traits.htm
- esrauch 14y agoCan you explain why this is actually a problem? Why not just always have a const T&, is there some negative in the "cheap copy" case to not copy?
- matthavener 14y agoI'm making some assumptions about the compiler optimization: If T is something like "int", then passing by reference can be more costly, because a value that was once stored in a register now needs a real memory address and must be deferenced to read.