
Steven Ross wrote:
- Use new and delete rather than *alloc and free. - Can any exceptions occur? If so, is the dynamically allocated memory leaked? Could you use a smart pointer to avoid this?
I was referring to exceptions in general between allocation and de-allocation, not just during allocation itself.
Using *alloc, they should return NULL if allocation failed, and that situation is handled. With new and delete I'll have to catch memory exceptions
See new(nothrow).
- Does it work with uint64_t? I see some variables declared as 'long', which often can't store a uint64_t.
There exists the problem of how to identify and deal with negatives. I try to avoid forcing any particular return data type
Why not just use Iterator::value_type (or whatever it's called; or some iterator_traits thing) everywhere?
They are already divided by 512, so an unsigned should fit inside a signed data type without trouble.
Dividing a 64-bit value by 512 does not make it small enough to fit in a 32-bit long. (Have I misunderstood you?) Phil.