Появилась задача добавить уже существующему классу возможность клонирования его объектов (изначально такой возможности не было — копирование было запрещено). Поскольку класс довольно массивный, то есть опасения, что при написании конструкторов копирования будут ошибки. По этой причине, не хотелось бы открывать эти конструкторы копирования для полного доступа, тем самым открывая возможность их неявного вызова в коде. Хотелось бы, чтобы вызовы конструкторов были только для задачи клонирования, и соответственно, осуществлялись явно. На ум тут пришло следующее решение:
class CA
{
std::unique_ptr<int> m_ui;
//^^^^^^^^^^^^^^^^^^^^^^^
explicit
CA(const CA& o)
:m_ui(new int(*o.m_ui))
{}
//-----------------------
public:
//-----------------------
CA(int i):
m_ui(new int(i))
{}
//-----------------------
CA(CA&&)=default;
//-----------------------
CA clone(){ return CA(*this);}
//-----------------------
int get(){return *m_ui;}
//-----------------------
};
Но насколько оно соответствует заявленной цели, и может, есть что-нибудь красивее?
(И, на всякий случай, есть ограничения — в функции clone нельзя использовать работу с динамической памятью).
Заранее благодарен за советы.