Re: Using operator new in function call and what the expr evaluates
to
antonov84@ukr.net wrote:
void foo(const char *) {}
int main()
{
foo(new const char * ("bar"));
}
....
It's just that I don't understand why that does not work.
Well, when you do 'new int' you get 'int*' as a return type. When you
do 'new char*' you obviously get a 'char**' as a return type. For this
to compile put deref in front of new:
foo(* new const char *("bar"));
But that would make a pointer-size memory leak ;] and wouldnt copy
anything xept "bar" base address. So you could pass "bar" to your foo
with same success and no memory leaks ;].
if you dont like patternish factory talk, you can do this
foo( strcpy( new char [sizeof("bar")], "bar") );
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Pick your mistake.
but this looks no less ugly I think ;]
Too error prone.
so maybe smthing like
template <int N>
const char* copystr(const char (&str)[N] )
{
return strcpy( new char[N], str );
}
You have N. Why not use memcpy ?
...
foo(copystr("bar"));
but still dont forget to delete this all later.
Btw storing 'const char*' as 'int' is fine unless you're on 64 bit
platform (or some other weird platform where sizeof(const char*) !=
sizeof(int)). So maybe you just retreived it back wrong, or your code
have overwritten it due to some buffer overrun or smth else.
Yes, good point. The other option is to place your pointers in a vector
and manage the vector with new strings.