Re[3]: Доступ к copy-ctor через отдельный метод
От: Igore Россия  
Дата: 25.03.22 07:20
Оценка:
Здравствуйте, _hum_, Вы писали:

__>>>[/ccode]

__>>>Но насколько оно соответствует заявленной цели,
I>>По виду не соответсвует, clone != move, у тебя после такого clone сам объект теряет владение над m_ui
__>ммм... я же копию создаю и ее перемещаю, а не исходный объект. Потому ничего он, вроде, не теряет.
Да, всё верно, я чего то под вечер подумал что CA(CA&&)=default; будет вызываться

__>>>и может, есть что-нибудь красивее?

I>>Ну, сама идея вроде правильная, пишем operator = в private и в public clone используем, придется да акуратно написать копирование, других вариантов в голову не приходит
__>>>(И, на всякий случай, есть ограничения — в функции clone нельзя использовать работу с динамической памятью).
I>>С таким ограничением непонятно как это сделать, если только переопределять new и использовать заранее выделеную память
__>может, как-то можно в clone передавать какой-нибудь пользовательский constructor-allocator, чтоб с его помощью создавать объект и возвращать указатель (чтобы можно было и конструктор перемещения закрыть в private)?
А чем мешает move? Сейчас при clone выполняется выделение памяти, так как объект создается, можно либо использовать память
char *buf  = new char[1000];   //pre-allocated buffer
CA *p = new (buf) CA();  //placement new

либо заранее создать пул объектов выдергивать объект из пула клонировать значения полей, когда он не нужен возвращать в пул
void clone(CA& toClone){ 
   toClone.set( get() );
}

Откуда ограничение что "clone нельзя использовать работу с динамической памятью"?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.