There is a difference between null and empty string (an empty string is still a valid string). If you want a "nullable" object (something that can hold at most one object of a certain type), you can use boost::optional:
boost::optional<std::string> str; // str is *nothing* (i.e. nullthere is no string) str = "Hello, world!"; // str is "Hello, world!" str = ""; // str is "" (i.e. empty string)