Initialise std :: string à partir d'un pointeur de caractère éventuellement NULL

Initialisation std::string à partir d'un NULL char pointeur est un comportement indéterminé, je crois. Donc, ici, sont des versions alternatives d'un constructeur, d'où mStdString est une variable membre de type std::string:

void MyClass::MyClass(const char *cstr) :
    mStdString( cstr ? cstr : "")
{}

void MyClass::MyClass(const char *cstr) :
    mStdString(cstr ? std::string(cstr) : std::string())
{}

void MyClass::MyClass(const char *cstr)
{
    if (cstr) mStdString = cstr;
    //else keep default-constructed mStdString
}

Modifier, constructeur de déclaration à l'intérieur de class MyClass:

MyClass(const char *cstr = NULL);

Qui de ces, ou peut-être quelque chose d'autre, est la meilleure ou la plus appropriée de façon à initialiser std::string à partir d'une NULL pointeur, et pourquoi? Est-ce différent pour les différentes normes C++? Assumer la version normale construire des options d'optimisation.

Je suis à la recherche d'une réponse avec l'explication de pourquoi une bonne façon de faire, ou une réponse avec un lien de référence (ceci s'applique également si la réponse est "n'a pas d'importance"), et pas seulement l'opinion personnelle (mais si vous devez, au moins en faire juste un commentaire).

source d'informationauteur hyde | 2013-07-04