The fact that it is a pointer doesn't affect your decision about ref or value capture. Since a pointer is small enough and you don't want to write it, you can capture by value.
I usually use the following rule:
- if it's bigger than a pointer, use a reference because the copying might be more expensive than the dereference
- if you want to see changes from outside the lambda, obviously references are the only option
- otherwise (if it's small and doesn't change) capture by value
So a pointer that doesn't change should be captured by value. If the compiler detects that there are no writes, it might optimize a capture by reference and pass by value anyway, but I'm not sure.