

このような関数を書いた場合、どのようにmain関数でtry、catchすればいいのでしょうか？よろしくお願いします。言語はｃ＋＋です。クラスを補足しました。説明不足ですみません。

[code]

    template <class T>class DynArray {
        T* pData;
        int size;　public:
        DynArray() {
            pData = NULL;
            size = 0;
        }
    
        DynArray(const DynArray& theOther) {
            size = 0;
            pData = NULL;
            this = theOther;
        }
    
        ~DynArray() {
            if (pData != NULL)
                delete[] pData;
        }
    
        void InsertAt(const T& newElement, int position);
        void RemoveAt(int position);
    };
    
    template<class T>void DynArray<T>::RemoveAt(int position) {
        if (position > size)
            throw new length_error("Position out of the size of DynArray");
    
        if (size == 1) {
            delete[] pData;
            size = 0;
            return;
        }
        size--;
    
        T* pTemp = new T[size];
    
        {
            int i, j;
            for (i = 0, j = 0; i < size; i++, j++) {
                if (j == position) {
                    j--; continue;
                }
                pTemp[i] = pData[j];
            }
        }
    
        delete[] pData;
        pData = pTemp;
    
    }
    
[/code]


CC BY-SA 3.0
2017-05-06T22:17:07.073
34497
2017-05-07T00:43:53.607
2017-05-07T00:43:53.607
4236
22981
question
c++
クラスを使った例外処理


`new length_error`で作られるのは`length_error*`なので

[code]

    try{
    }
    catch(length_error* le){
    }
    
[/code]

とすることはできます。ただし、`catch`しなかった場合や`catch(...)`とした場合に`delete`する機会がなくなる点、更にはメモリ不足で`new`に失敗する可能性がある点を踏まえて

[code]

    if (position > size)
      throw length_error("Position out of the size of DynArray");
    
[/code]

と`new`しないことをお勧めします。


CC BY-SA 3.0
2017-05-07T00:06:56.210
34498
2017-05-07T00:06:56.210
4236
34497
answer