Я работаю над классом матричного представления, конструктор которого принимает матрицу в качестве параметра и привязывает ее к const
референтный член. Я бы очень хотел избежать связывания значений r, так как они не связываются через параметр конструктора, и в итоге мы получаем висячую ссылку. Я придумал следующее (упрощенный код):
struct Foo{};
class X
{
const Foo& _foo;
public:
X(const Foo&&) = delete; // prevents rvalue binding
X(const Foo& foo): _foo(foo){} // lvalue is OK
};
Foo get_Foo()
{
return {};
}
const Foo get_const_Foo()
{
return {};
}
Foo& get_lvalue_Foo()
{
static Foo foo;
return foo;
}
int main()
{
// X x1{get_Foo()}; // does not compile, use of deleted function
// X x2{get_const_Foo()}; // does not compile, use of deleted function
X x3{get_lvalue_Foo()}; // this should be OK
}
В основном я удаляю конструктор, который принимает const Foo&&
в качестве параметра. Обратите внимание, что мне нужно const
так как в противном случае кто-то может вернуться const Foo
от функции, и в этом случае он будет привязан к const Foo&
конструктор.
Вопрос:
Это правильная парадигма отключения привязки rvalue? Я что-то пропустил?
Задача ещё не решена.
Других решений пока нет …