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参照を宣言する簡単な方法はありますか? in:オブジェクト自体がconstであることを確認します。
編集:私はunique_ptrのタイプを変更できないと仮定します。実際のシナリオでは、いくつかのオブジェクトがvector<unique_ptr<C>>
で構築され、一部の関数がその要素の1つに対する(const)参照を取得することがあります。
'std :: unique_ptr'を使ってください。 –
Petr
さらに悪いことに、constオブジェクトの参照されるメンバ変数を変更することができます。 – stefaanv
最初のスニペットも非常に疑わしく見えます。私に何かを割り当ててみてください。 –