我创建了自己的向量类,其行为有点像通常的std :: vector(我需要为此分配执行此操作)。现在我想确定,如果有人试图向这个向量类中写入超出它可以访问的内存范围的东西,它会给出错误并终止程序。创建一个类以抛出错误
我尝试:
template<typename T>
class vector
{
private:
T *elements;
int sz;
public:
// vector functions etc. //
struct out_of_range
{
string s;
out_of_range(string b) : s{b} {cerr << "error: " << s << endl;}
};
};
所以现在我能遇到一个超出范围的错误矢量成员函数,我把这个类。例如在【我的运算符重载,我有这样一个检查:
if(i < 0 || sz <= i) throw out_of_range("index out of range");
现在这个工程,并与下面的消息终止程序:
error: index is out of range terminate called after throwing an instance of 'vector::out_of_range' Aborted (core dumped)
我的问题是,如果这是正确的做法。我是否允许使用像我这样的函数,并且可以简单地抛出这个函数而不捕获它?据我所知,抛出没有捕获电话terminate()正确吗?这是不好的编码习惯?
我希望我没有混淆你们,我的问题有点可以理解。感谢您的任何帮助提前:)
编辑:对不起,我应该提到,我不允许使用任何类我没有创建自己,除了一些基本的东西,如std :: string和基本输入和输出。
如何重用['std :: out_of_range'](http://en.cppreference.com/w/cpp/error/out_of_range)?或者使用/继承其他标准异常类之一([例如,在此参考文献中](http://en.cppreference.com/w/cpp/error))? –
我想这里的重点不是重用(因为这样整个向量组件应该被重用),而是了解写入数据结构。 – Doleron
@Doleron你是绝对正确的,我已经编辑了这篇文章,因为我忘了指定。我需要创建自己的类来使用,只能使用std :: string和std :: cout/cerr/cin。 – JuliusAF