صحیح ترین راهی وجود نداره . توی ++C انتخاب هایی زیادی وجود داره دلیلش اینکه شرایط زیادی هم وجود داره .
برای همین شما نسبت به شرایط تصمیم میگیرید که چطوری از حافظه استفاده کنید .
اگ براتون Memory Fragmentation از سرعت مهمتره از Memory Allocatorی استفاده میکنید که هدف اصلیش Defragmentation باشه و خوب سرعت برنامه تون هم میاد پایین .
توی شرایطی بخاطر سرعت نیاز دارید که از یک Memory Pool استفاده کنید و حافظه رو فدای سرعت میکنید .
و بازم افراطی ترش اینه که هر شی Memory Pool رو با اندازه ی Cache Line تراز (Align) میکنید که حتی بازم حافظه بیشتری رو فدای سرعت میکنید .
یا توی شرایط دیگه ای از Stack Allocator استفاده کنید .
new و delete یا malloc و free بصورت عادی مشکلی ندارن . و یه حالت تعادل دارن . شما نسبت به برنامه ای که مینویسید نیازتون تغییر میکنه . البته همیشه میتونید از همین new و delete استفاده کنید ولی توی شرایط های خاص خیلی بهتره که روش های دیگه هم استفاده کنید.