PRB: Operator New Can't Be Called for CONST or VOLATILE TypesLast reviewed: July 25, 1997Article ID: Q120878 |
The information in this article applies to:
SYMPTOMSWhen trying to allocate memory from the heap on const or volatile types, you may see this error:
error C2468: 'new' : cannot allocate 'const'/'volatile' objects (type is 'const int ') CAUSEThis behavior is by design. For any type T, the type-specifier cannot contain const T or volatile T. For example, the following type-specifiers won't work:
new const int; // Returns 'const int *' new volatile int; // Returns 'volatile int *' new int * const; // Returns 'int * const *' new int * volatile; // Returns 'int * volatile *' RESOLUTIONThe following type-specifiers will work:
new int const *; // Returns 'int const **' (or 'const int**') new int volatile *; // Returns 'int volatile **' // (or 'volatile int**') MORE INFORMATIONFor more information, please see the description on 'new Operator' in the C++ Language Reference that comes with Microsoft C/C++ version 7.0 and Microsoft Visual C++ version 1.0 for Windows or Windows NT.
Sample Code
/* Compile options needed: /c /W3 */ void main(void) { // illegal // Would return a 'const int *' const int* i = new const int; // Would return a 'volatile int *' volatile int* j = new volatile int; // Would return a 'int * const *' int* const* k = new int * const; // Would return a 'int * volatile *' int* volatile* l = new int * volatile; // legal // pointer to const pointer to int int const* *m = new int const *; int volatile* *n = new int volatile *; } |
Additional query words: errmsg 8.00 8.00c 9.00 9.10
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |