PRB: Operator New Can't Be Called for CONST or VOLATILE Types
ID: Q120878
|
The information in this article applies to:
-
Microsoft Visual C++ for Windows, versions 1.0, 1.5, 1.51, 1.52
-
Microsoft Visual C++ 32-bit Edition, versions 1.0, 2.0, 2.1, 4.0, 5.0
SYMPTOMS
When 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 ')
CAUSE
This 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 *'
RESOLUTION
The following type-specifiers will work:
new int const *; // Returns 'int const **' (or 'const int**')
new int volatile *; // Returns 'int volatile **'
// (or 'volatile int**')
MORE INFORMATION
For 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
Keywords : kberrmsg kbLangCPP kbVC
Version : :1.0,1.5,1.51,1.52,2.0,2.1,4.0,5.0
Platform : NT WINDOWS
Issue type : kbprb