c++new-operatorreallocdelete-operator

How do you 'realloc' in C++?


How can I realloc in C++? It seems to be missing from the language - there is new and delete but not resize!

I need it because as my program reads more data, I need to reallocate the buffer to hold it. I don't think deleteing the old pointer and newing a new, bigger one, is the right option.


Solution

  • Use ::std::vector!

    Type* t = (Type*)malloc(sizeof(Type)*n) 
    memset(t, 0, sizeof(Type)*m)
    

    becomes

    ::std::vector<Type> t(n, 0);
    

    Then

    t = (Type*)realloc(t, sizeof(Type) * n2);
    

    becomes

    t.resize(n2);
    

    If you want to pass pointer into function, instead of

    Foo(t)
    

    use

    Foo(&t[0])
    

    It is absolutely correct C++ code, because vector is a smart C-array.