Question: When I create a `std::string` using the default constructor, is ANY memory allocated on the heap? I'm hoping the answer does not depend on the implementation and is standardized. Consider the following:

```
std::string myString;

```

Answer: 
Unfortunately, the answer is no according to N3290.

Table 63 Page 643 says:

* `data()` a non-null pointer that is copyable and can have 0 added to it
* `size()` 0
* `capacity()` an unspecified value

The table is identical for C++03.
Generally, **yes** they allocate memory on the heap. I'll give an example: `c_str()` requires a NULL trailing character '\0'. Most implementations allocate this NUL `\0` ahead of time, as part of the string. So you'll get at least one byte allocated, often more.

If you really need specific behavior I'd advise writing your own class. Buffer/string classes are not that hard to write.