new
lets you specify the storage for the allocation you request. allocations via new/new[]
are generally on the heap (e.g. wrapping malloc
), but ultimately implementation defined. as well, the compiler could have enough information to bypass this in some cases.
where is it, on system stack?
Technically, you would typically write C++ to the specification -- of an abstract machine.
But typically, yes - the object is allocated on the thread's stack.
Why the second is worse? When we use first, when the second one?
The second should be your default because it is very clear, the compiler manages its lifetime and allocation for you, and also very fast. Some exceptions to this include:
- when you have a large allocation (stack sizes are relatively small)
- sometimes when you want to share the allocation with another thread
- when you want to pass the allocation to another thread
- when you want the object to live beyond the scope of the method, and you will typically use a smart pointer or other container which will delete the object properly.
in short, there's a lot less that could go wrong (using the second), and far less time is spent creating allocations via the general purpose system allocators.