I'd like to know about other patterns that could be more efficient than the use of factories.
You could use a memory pool, the boost one is pretty good: http://www.boost.org/doc/libs/1_58_0/libs/pool/doc/html/boost_pool/pool.html
And every client could configure the maximum size of the pool. Allocations and deallocations will be really fast,and you will drop your factory implementation