Les Exceptions C++ avec le message

Je ne suis pas sûr que mon exception personnalisée approche est correcte. Ce que je veux faire est de lancer des exceptions avec des messages personnalisés, mais il semble que j'ai créé une fuite de mémoire...

class LoadException: public std::exception {
private:
    const char* message;
public:
    LoadException(const std::string message);
    virtual const char* what() const throw();
};


LoadException::LoadException(const std::string message) {
    char* characters = new char[message.size() + 1];
    std::copy(message.begin(), message.end(), characters);
    characters[message.size()] = '
class LoadException: public std::exception {
private:
const char* message;
public:
LoadException(const std::string message);
virtual const char* what() const throw();
};
LoadException::LoadException(const std::string message) {
char* characters = new char[message.size() + 1];
std::copy(message.begin(), message.end(), characters);
characters[message.size()] = '\0';
this->message = characters;
}
'
; this->message = characters; }

Je l'utilise comme suit:

void array_type_guard(Local<Value> obj, const std::string path) {
    if (!obj->IsArray()) {
        throw LoadException(path + " is not an array");
    }
}

try {
    objects = load_objects();
} catch (std::exception& e) {
    ThrowException(Exception::TypeError(String::New(e.what())));
    return scope.Close(Undefined());
}

J'ai peur que le tableau créé dans le constructeur n'est jamais supprimé. Mais je ne suis pas sûr de la façon de le supprimer - dois-je ajouter destructeur ou peut-être utiliser l'approche complètement différente?

Mise à jour:

En fait, j'ai essayé d'utiliser la classe string comme suit:

class LoadException: public std::exception {
private:
    const char* msg;
public:
    LoadException(const std::string message);
    virtual const char* what() const throw();
};

LoadException::LoadException(const std::string message) {
    msg = message.c_str();
}

const char* LoadException::what() const throw() {
    return msg;
}

Mais ne peut pas obtenir le message d'erreur puis - hasard de sortie est affiché lorsque j'imprime le "what()".

utilisez simplement string pour stocker le message. Ou est-il une raison pour le char *?
Non, il n'y a aucune raison pour char*. J'ai changé le code pour la chaîne. Merci.
Ou tout simplement wite un destructeur deletes l'allocation d'un tableau de caractères.
connexes stackoverflow.com/questions/2715386/...

OriginalL'auteur Alex Netkachov | 2013-07-03