ссылки const ссылаются на то, что вы не можете изменить объект, на который вы ссылаетесь. Например:const ссылка на указатель может изменить объект
int i = 1;
const int& ref = i;
ref = 42; // error, because of a const reference
Но если использовать ссылку на указатель или unique_ptr
, вы можете. Пример:
class TinyClass {
public:
int var = 1;
void f1() { var = 42; }
};
std::unique_ptr<TinyClass> pointer(new TinyClass);
const std::unique_ptr<TinyClass>& constRef = pointer;
constRef->f1(); // no error
Я предполагаю, что это происходит потому, что сам указатель не был изменен. Но это чувствует misleading
, или как легкая ошибка. Есть ли простой способ объявить «реальную» ссылку на указатель? Как и в: обеспечивает сам объект const.
изменить: предположим, что я не могу просто изменить тип unique_ptr. Сценарий реального мира будет состоять в том, что некоторые объекты построены в vector<unique_ptr<C>>
, а некоторые функции получают ссылку (const) на один из ее элементов.
Просто используйте 'std :: unique_ptr'. –
Petr
Еще хуже: вы можете изменить ссылочную переменную-член const-объекта. – stefaanv
Этот первый фрагмент выглядит очень подозрительным. Попробуйте присвоить что-либо i. –