Как я могу ограничить пользователя передачей ссылки на 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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