Let p be a pointer and r be the ref it is being changed to.
This table details common idioms that need changing to convert the pointer to a ref:
p=NULL; | r.nullify(); |
p=new T; | r=T(); |
p=new T(x,y,z); | r=T(x,y,z); |
p==NULL, p!=NULL etc | r, !r etc |
delete p; | Remove this statement, it is superfluous |
p->*m(); | (*r).*m() No Member pointer dereference |
p++, p+1, etc. | Illegal. Consider using a container type. |
Assignment and copying refs are more expensive than the equivalent pointer operations due to the reference counting mechanism. Therefore, consider using C++ references whereever possible:
void foo(const ref<int>& x); instead of void foo(ref<int> x); { { const ref<int>& y=...; instead of ref<int> y=...;
A certain amount of care must be taken if you need to declare the
ref as non-const. If it is just the target that needs updating,
it is fine to use a ref<T>&
variable. However, if the ref
itself needs updating, then use ref<T>
instead.