У меня есть предупреждение в моем коде С++ 11, который я хотел бы исправить правильно, но я действительно не знаю, как это сделать. Я создал свой собственный класс исключений, который получен из std::runtime_error
:
class MyError : public std::runtime_error
{
public:
MyError(const std::string& str, const std::string& message)
: std::runtime_error(message),
str_(str)
{ }
virtual ~MyError()
{ }
std::string getStr() const
{
return str_;
}
private:
std::string str_;
};
Когда я компилирую этот код с помощью clang-cl using /Wall
я получаю следующее предупреждение:
warning: definition of implicit copy constructor for 'MyError' is deprecated
because it has a user-declared destructor [-Wdeprecated]
Поэтому, поскольку я определил деструктор в MyError
никакой конструктор копии не будет создан для MyError
. Я не совсем понимаю, вызвало ли это какие-либо проблемы...
Теперь я мог избавиться от этого предупреждения, просто удалив виртуальный деструктор, но я всегда думал, что производные классы должны иметь виртуальные деструкторы, если базовый класс (в данном случае std::runtime_error
) имеет виртуальный деструктор.
Поэтому я думаю, что лучше не удалять виртуальный деструктор, а определять конструктор копирования. Но если мне нужно определить конструктор копирования, возможно, мне также следует определить оператор назначения копирования и конструктор перемещения и оператор назначения перемещения. Но это кажется излишним для моего простого класса исключения !?
Любые идеи, как лучше всего исправить эту проблему?