Общий указатель аналогичен необработанному указателю с точки зрения разыменования и константности.
Пример:
Обратите внимание, что ниже термин [const]
означает, что мы можем выбрать, вставлять const или нет:
[const] X * [const] p;
Дает нам 4 варианта относительно константности:
X* p;
- p является изменяемым указателем (его можно изменить, чтобы он указывал на другой X) на изменяемый X
const X *p
- p является изменяемым указателем на неизменяемый X
X * const p;
- p является неизменным указателем (может указывать только на этот X) на изменяемый X
const X * const p;
- p является неизменным указателем (может указывать только на этот X) на неизменный X
Аналогично с shared_ptr:
std::shared_ptr<T> &p
- ссылка на изменяемый указатель на изменяемый T
const std::shared_ptr<T> &p
- ссылка на неизменяемый указатель на изменяемый T
std::shared_ptr<const T> &p
- ссылка на изменяемый указатель на неизменяемый T
const std::shared_ptr<const T> &p
- ссылка на неизменный указатель на неизменный T