Re: boost alternative to realloc
"Kai-Uwe Bux" <jkherciueh@gmx.net> wrote in message
news:hqd0h7$tos$1@news.doubleSlash.org...
Leigh Johnston wrote:
"Alf P. Steinbach" <alfps@start.no> wrote in message
news:hqcu3t$7lo$1@news.eternal-september.org...
<snip>
Unless I am mistaken you are basically advocating that the following code
is correct according to the standard:
void foo()
{
std::vector<int> v;
v.reserve(2);
v.push_back(41);
*(&v[0]+1) = 42;
}
The above code is plain wrong.
Please define your terms: what do you take "correct" to mean, and what is
"plain wrong"? Does the code have UB according to the standard?
If I you disagree then your position is
untenable. Anyone with an once of common sense would use std::vector in
the ways it was designed for and not abuse it like you are suggesting.
Keep the context in mind: Alf was pondering this option in the context of
the OP's request: If the alternative is to use malloc(), free(), and
realloc() manually, why not use the above? Or, why not do something like
the
above inside the implementation of a little wrapper that, to the outside,
looks like the wrapper for malloc(), free(), and realloc() that the OP was
looking for?
Best
Kai-Uwe Bux
It is wrong in the sense that it is bad practice irrespective of whether it
is UB or not. std::vector is a container, it is not a general purpose
memory allocator. The correct solution is to write a class designed for the
specific requirements the OP had and I am glad to say that the OP had
sufficient common sense to realize this straight away, common sense that Alf
seems to lack.
/Leigh