У меня есть класс, который «запоминает» ссылку на некоторый объект (например, целочисленную переменную) . Я не могу, чтобы он ссылался на значение, которое немедленно уничтожается, и я ищу способ защитить пользователей моего класса от случайных действий.
Является ли перегрузка rvalue-reference хорошим способом предотвращения передачи временного объекта?
struct HasRef {
int& a;
HasRef(int& a):a(a){}
void foo(){ a=1; }
};
int main(){
int x=5;
HasRef r1(x);
r1.foo(); // works like intended.
HasRef r2(x+4);
r2.foo(); // dereferences the temporary created by x+4
}
Подойдет ли приватная перегрузка rvalue?
struct HasRef {
int& a;
HasRef( int& a ):a(a){}
void foo(){ a=1; }
private:
HasRef( int&& a );
};
... HasRef r2(x+1); // doesn't compile => problem solved?
Есть какие-то подводные камни, которых я не заметил?