Использование распределения стека вместо выделения кучи для фабричных методов

Я пытаюсь изменить код. В настоящее время этот код соответствует шаблону:

function f() {
Transaction trans;
// Do Operation
trans.commit();
}

Здесь транзакция является конкретным классом. Я хочу переместить его в интерфейс и сделать этот код похожим на:

function f() {
ITransaction* trans = GetTransaction();
// Do Operation
trans->commit();
}

// Factory
ITransaction* GetTransaction()
{
return new Transaction();
}

ПРОБЛЕМА: мы начали использовать метод new здесь, в фабрике, который теперь выполняет выделение кучи. Я хочу избежать такого распределения кучи и все же удается использовать интерфейс.
Есть ли способ добиться этого?

Спасибо,
Кайлас

0

Решение

То, что вы можете сделать, это что-то вроде размещения класса Factory в стеке.

void function() {
Factory factory{};
auto transaction = factory.getTransaction(arguments...);
}

Фабрика может выглядеть так:

class Factory {
A aTransaction;
B bTransaction;
C correctTransaction;

transactionBase* getTransaction(arguments...) {
//return one member based on arguments
}
}

Однако, если ваши аргументы допускают шаблоны, становится немного легче сделать что-то вроде

void function () {
Factory<Arguments...> transaction;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]