next up previous contents
Next: Mutable vs Immutable Strings Up: Design Trade-offs Previous: Moving size_and_flags inside data   Contents

C vs C++ interface

Most of the Str library could have been implemented in C by defining Str as a struct and passing it as the first argument to library functions. For example, instead of calling x.append(y) one could call Str_append(x,y).

Although there are several minor problems with this approach, a major problem is the lack of a destructor. The nice thing about a destructor is that, when a Str object is placed on the stack, it will automatically appropriately free any data it has allocated when it goes out-of-scope. In C, we would have to provide a Str_free() function and programmers would have to remember to call it, even if they created their Str structures on the stack. That is a fairly error-prone requirement that nullifies some of the advantages of automated buffer management.