Когда кто-то хочет запретить кому-либо передавать временную переменную в качестве константной ссылки, можно удалить перегрузку r-значения:
class Foo
{
public:
Foo(const Bar& bar) : mBar(&bar) {}
Foo(const Bar&&) = delete;
private:
const Bar* mBar;
};
Однако, когда таких параметров несколько, этот метод плохо масштабируется.Для эффективности необходимо удалить все возможные комбинации:
Foo(const Bar&&, const Baz&, const Qux&) = delete;
Foo(const Bar&, const Baz&&, const Qux&) = delete;
Foo(const Bar&, const Baz&, const Qux&&) = delete;
Foo(const Bar&&, const Baz&&, const Qux&) = delete;
//And every other combination...
Существуют ли методы, которые масштабируются лучше, чем этот?