У меня есть функция, которая использует информацию, хранящуюся в структуре A. Эта функция вызывается очень часто, и большую часть времени она может просто полагаться на информацию, хранящуюся в A.
При некоторых (редких) условиях один из объектов А не может быть использован. Новый объект должен быть создан, и он не должен жить дольше, чем функция (так как он может быть использован только один раз и занимает много места).
У меня есть немного псевдо-кода, который демонстрирует мою проблему. На данный момент мне действительно не нравится это из-за призыва к «новому», но я не могу придумать другой способ сделать это с помощью умных указателей.
Поскольку я читал в каждой книге, что вы не должны прямо сейчас использовать указатели и полагаться на умные указатели, я не уверен, что правильно реализовать то, что я хочу.
struct A{
myData data;
}
void often_called_function(int i, A &structA)
{
// Pointer which shall dynamically point to existing or newly created object
myData *current_data;
// we rarely land here, data can't be used
if (i == 10) {
current_data = new myData(special arguments);
current_data->reinit(i);
}
// most of the time we land here, no need to re-create data, just reinit existing data from struct A
else {
structA.data.reinit(i);
current_data = &structA.data;
}
// do more stuff with current_data
current_data->do_something();
}
Так что, в принципе, я ищу "более хороший" и безопасный способ сделать это, кто-нибудь может мне помочь?
Заранее спасибо