我創建了自己的向量類,其行爲有點像通常的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