Re: Simple question on Pointers
"Tommy" <bad@reallybad.com> wrote in message
news:O2PB1qlUJHA.5952@TK2MSFTNGP06.phx.gbl...
Alan Carre wrote:
"Doug Harrison [MVP]" <dsh@mvps.org> wrote in message I don't know what a
"char[12]" is. Perhaps you're thinking we're talking about FORTRAN or
something. There is no such thing as a char[12] as far as the C++
language is concerned.
How about?
char *p = new char[12];
Hehe, astonishing! Where'd you get that MVP from?
You DO know that that is how to specify a Type* using the "new" operator and
is entirely a feature of "new". In this case char[12] is not a type, it is a
collection of parameters passed to the new operator.
The way it works is like this:
T* pT = new Type[Size];
This is how we allocate an array dynamically using "new". "Type" is an
actual C++ type, and Size is a "size_t". The brackets are special indicators
which tell the compiler to insert 'secret' code allowing for the use of
delete[] (vector deleting destruction) for non-trivial types (if you go and
look at the assembler code generated you'll see it allocates some extra
space to store the size of the array, meaning that when you use delete[],
the destructors of the individual elements pointed to by pT can be called).
Would you consider std::map's use of the square bracket operator proof that
if you put a type before some square brackets and an int, that that
expression is a novel C++ type?
class NewType : public std::map<int, int > {}
NewType[13];
The above is not a type, it is an expression.
- Alan Carre