Syntax:
type *p = new type; // undefined initial value for user-defined type type *p = new type(); // default initial value, 0 for user-defined type type *p = new type(initializer); type *p = new type[size]; // default constructor type *p = new type[size](); // also default constructor type *p = new (nothrow) type; // don't throw bad_alloc exception type *p = new (nothrow) type(); type *p = new (nothrow) type(initializer); type *p = new (nothrow) type[size]; type *p = new (nothrow) type[size](); delete p; delete[] p;Notes:
- Initializers cannot be specified for arrays created with new. All elements of an array will be initialized with the default constructors. If the type doesn't have a default constructor, this will be a compile-error.
- The behavior when operator new fails is compiler-specific. Most compilers will throw a std::bad_alloc exception. Using nothrow as above will return 0 or NULL and continue the program when new fails. Another option is to use function set_new_handler to handle new failures. The header file <new> is needed for the use of bad_alloc, nothrow, and set_new_hanlder.
- The statement delete NULL; is allowed and no error will be reported.
- In order to avoid double-free problem, assign the pointer to NULL after deletion.
delete p; p = NULL;
ordelete[] p; p = NULL;
- It is not possible to directly reallocate memory allocated with new[ ]. To extend or reduce the size of a block, one must allocate a new block of adequate size, copy over the old memory, and delete the old block.
- Arrays allocated with new[ ] must be deallocated with delete[ ], not delete. Since the layout of arrays allocated with new[ ] is implementation defined, and possible not compatible with new. Some implementations of new[ ] embed the number of allocated objects first into the beginning of the allocated memory chunk, and return pointer to the remaining part of the array.
Related Posts:
Array Declaration and Initialization
Object Initialization
No comments:
Post a Comment