У меня есть класс, который хранит константный указатель на некоторые внешние данные. Чтобы получить указатель, пользователь передает объект по ссылке. Объекту должно быть разрешено быть константным. Помимо класса у меня есть еще фабричная функция, которая опять же принимает ссылку. Вот пример минимального стиля
Код: Выделить всё
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, оставляя висячий указатель
Есть ли способ запретить пользователю вызывать конструктор и фабричную функцию таким образом, и если да, то как? В реальном коде фабричная функция является предпочтительным способом создания объектов этого класса, поскольку она является шаблонной, а использование фабричной функции гораздо менее многословно.
Подробнее здесь:
https://stackoverflow.com/questions/799 ... -reference