c++ - c++14抛出的异常类型不可复制构造
问题描述
我有一个 c++14 异常类,一个从 std::exception 继承的基本异常。我从基类中创建了派生异常,其中两个显示在下面的代码中(BadRequest 和 ServerError)。
这是我的异常类,以下代码:
#ifndef CODEDATABASE_MYEXCEPTIONS_HPP
#define CODEDATABASE_MYEXCEPTIONS_HPP
#include <string>
#include <utility>
using namespace std;
class MyException : public exception {
protected:
public:
MyException(string error, uint32_t code, string type) :
error_(move(error)), code_(code),type_(move(type)) {}
public:
const std::string &getError() const {
return error_;
}
uint32_t getCode() const {
return code_;
}
const std::string &getType() const {
return type_;
}
private:
string error_;
uint32_t code_;
string type_;
};
class BadRequest : public MyException {
public:
explicit BadRequest(const string& message):
MyException("BadRequest error: " + message, 400, "BadRequest") {
}
};
class ServerError : public MyException {
public:
explicit ServerError(const string& message):
MyException("Server error: " + message, 500, "ServerError") {
}
};
#endif //CODEDATABASE_MYEXCEPTIONS_HPP
这是我的驱动程序代码,用于测试这些异常
#include <iostream>
#include "catch.hpp"
#include "exceptions/MyExceptions.hpp"
void internal_raise(bool badrequest) {
if (badrequest) {
throw BadRequest("a bad request");
} else {
throw ServerError(" a server error");
}
}
void raise_exception(bool badrequest) {
try {
internal_raise(badrequest);
} catch (MyException& e) {
throw e; //WARNING IS REPORTED
}
}
TEST_CASE("work on exceptions", "[exceptions]") {
try {
raise_exception(true);
} catch (MyException& e) {
std::cout << e.getError() << std::endl;
}
try {
raise_exception(false);
} catch (MyException& e) {
std::cout << e.getError() << std::endl;
}
}
该代码有效,但是我收到一个我不理解的警告,我想知道如何解决它
抛出的异常类型不可复制构造。
这在“throw e”语句的 raise_exception 方法中报告。为什么我要让这个工作?避免此警告的正确方法是什么?
解决方案
推荐阅读
- database - PL/SQL ORA-29280: 无效的目录路径和 ORA-06512: 在 oracle 11g 中的“SYS.UTL_FILE”
- python - 如何在 Django 中添加默认不支持的语言?
- python - 如何检查是否在 tkinter 上单击了按钮
- c# - 将 String 转换为 String[] 但在撇号中不使用逗号
- r - ddply 和 group_by 的更快替代方案
- r - 带有 data.table 的每个自变量的线性回归循环
- css - 带有省略号的 CSS3 flexbox 布局在移动 Safari 上不起作用
- sql-server - SQL Server 2012 合并复制 - 全文索引
- mysql - django扩展查询条件`COLLATION`
- python - 如何在标注器之前/之后强制在 spacy 中使用 pos 标签?