const в shared_ptr: мне нужно два или только один - PullRequest
0 голосов
/ 09 сентября 2018

Я сталкиваюсь с этим фрагментом кода:

const std::shared_ptr<const T>& a_shared_pointer,

Мне действительно любопытно, что означают два const ? Они имеют в виду одно и то же? a_shared_pointer - это общий указатель, указывающий на то, что мы не можем изменить?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Общий указатель аналогичен необработанному указателю с точки зрения разыменования и константности.

Пример:

Обратите внимание, что ниже термин [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

0 голосов
/ 09 сентября 2018

a_shared указатель является ссылкой на const std::shared_ptr (например, вы не можете вызывать неконстантные операции над указателем через эту ссылку, например reset и т. Д.), Указывая на const T, означающее, что указатель на объект также const (так что вы не можете сделать a_shared_ptr->non_const_method()).

...