I'm not sure my custom exception approach is correct. I want to make an exception using special messages, but it seems like I created a memory leak ...
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; }
I use it as follows:
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()); }
I am afraid that the array created in the constructor is never deleted. But I'm not sure how to remove it - should I add a destructor or maybe use a completely different approach?
Update:
I really tried to use the string class as follows:
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; }
But it cannot get an error message, then - when any random output is displayed, when I print "what ()".
source share