I reply 4 years late while trying to find a similar answer. It seems few people have gone the extra mile with Box2D.
So, you are definitely leaking since new b2BlockAllocator
doesn't get deleted anywhere, neither by you nor by the Clone function.
Just create a local b2BlockAllocator so that it will be destroyed when out-of-scope. And that's it.
b2BlockAllocator cloneHelper;
b2PolygonShape* ps = (b2PolygonShape*)shape->Clone(&cloneHelper);