Как мне безопасно держаться константной ссылки C ++?

ака. как мне предотвратить const& параметр случайно привязан к временному?

У нас есть класс, который по сути выглядит так:

template<typename T>
struct Observer {
const T* target;

void observe(const T& x) {
target = &x;
}
};

То есть эти объекты будут «держаться» за тот const-ref, который они передают.

У нас была ошибка, когда observe Функция случайно получила временный объект — что-то, что никогда не может быть действительным для этого случая.

Какие варианты у нас есть, чтобы предотвратить случайную привязку к временному?

Изменение подписи на (const T* px) будет работать технически (принятие временного адреса — это предупреждение компилятора = ошибка здесь), это не очень привлекательно по другим причинам.

Примечание: да, это всегда будет иметь потенциальные проблемы управления жизненным циклом, но до сих пор реальная вещь работала довольно хорошо из-за ее ограниченного шаблона использования — но случайная передача временных имеет наблюдалось на практике, поэтому мы хотим рассмотреть это в первую очередь.

2

Решение

Вы можете добавить ссылочную перегрузку rvalue и удалить ее:

void observe(const T&& x) = delete;

Теперь будет выдана ошибка компиляции, если кто-то попытается передать временный.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]