Как я могу ограничить пользователя передачей ссылки на const lvalue [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Как я могу ограничить пользователя передачей ссылки на const lvalue [дубликат]

Сообщение Anonymous »

У меня есть класс, который хранит константный указатель на некоторые внешние данные. Чтобы получить указатель, пользователь передает объект по ссылке. Объекту должно быть разрешено быть константным. Помимо класса у меня есть еще фабричная функция, которая опять же принимает ссылку. Вот пример минимального стиля

Код: Выделить всё

class PointerHolder
{
public:
PointerHolder(const double &d)
:m_ptr(&d)
{}
//other functions here that use m_ptr
private:
const double *m_ptr;
};

PointerHolder make_PointerHolder(const double &d)
{
return PointerHolder(d);
}
Проблема в том, что и конструктор, и фабрика разрешают передачу значения r, оставляя висячий указатель

Код: Выделить всё

PointerHolder holder(5.0);

Код: Выделить всё

auto holder = make_PointerHolder(1.0);
Есть ли способ запретить пользователю вызывать конструктор и фабричную функцию таким образом, и если да, то как? В реальном коде фабричная функция является предпочтительным способом создания объектов этого класса, поскольку она является шаблонной, а использование фабричной функции гораздо менее многословно.

Подробнее здесь: https://stackoverflow.com/questions/799 ... -reference

Вернуться в «C++»