Предположим, что у меня есть объект с членом, который стоит дорого построить, и потребность в reset()
функции, которая сбрасывает его в исходное состояние:Шаблоны для сброса объектов в исходное состояние
struct Example
{
// option 1: efficient, but need to duplicate initialization logic of reset()
Example(int param) : expensive_member_(param), param_(param)
{
}
/* option 2: less code, but initializes expensive_member_ twice
Example(int param) : param_(param)
{
reset();
}*/
void reset()
{
expensive_member_ = ClassWithExpensiveConstructor(param_);
}
ClassWithExpensiveConstructor expensive_member_;
int param_;
}
Есть ли лучше способ/шаблон для эффективного возврата объекта в исходное состояние без дублирования логики инициализации в списке инициализатора и функции reset
?
Редактировать: Если нет общего способа достижения того, что я хочу, это также приемлемый результат этого вопроса!
Вы можете дать 'ClassWithExpensiveConstructor' свой собственный метод сброса, который сделает наиболее эффективный сброс. –
Почему бы не сделать road_member_ указателем? – Hcorg
@ JonathanPotter не может просто переместить проблему в другое место? То есть Мне нужно будет беспокоиться о дублированном коде в ClassWithExpensiveConstructor вместо 'Example'? – anderas