new
/ delete
- Allocate / release memory
- Memory allocated from 'Free Store'.
- Returns a fully typed pointer.
new
(standard version) never returns a NULL
(will throw on failure).
- Are called with Type-ID (compiler calculates the size).
- Has a version explicitly to handle arrays.
- Reallocating (to get more space) not handled intuitively (because of copy constructor).
- Whether they call
malloc
/ free
is implementation defined.
- Can add a new memory allocator to deal with low memory (
std::set_new_handler
).
operator new
/ operator delete
can be overridden legally.
- Constructor / destructor used to initialize / destroy the object.
malloc
/ free
- Allocate / release memory
- Memory allocated from 'Heap'.
- Returns a
void*
.
- Returns
NULL
on failure.
- Must specify the size required in bytes.
- Allocating array requires manual calculation of space.
- Reallocating larger chunk of memory simple (no copy constructor to worry about).
- They will NOT call
new
/ delete
.
- No way to splice user code into the allocation sequence to help with low memory.
malloc
/ free
can NOT be overridden legally.
Table comparison of the features:
Feature |
new / delete |
malloc / free |
Memory allocated from |
'Free Store' |
'Heap' |
Returns |
Fully typed pointer |
void* |
On failure |
Throws (never returns NULL ) |
Returns NULL |
Required size |
Calculated by compiler |
Must be specified in bytes |
Handling arrays |
Has an explicit version |
Requires manual calculations |
Reallocating |
Not handled intuitively |
Simple (no copy constructor) |
Call of reverse |
Implementation defined |
No |
Low memory cases |
Can add a new memory allocator |
Not handled by user code |
Overridable |
Yes |
No |
Use of constructor / destructor |
Yes |
No |
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…