だから私は次のクラスメソッドを持っています(おそらく要求があればさらに追加します):
編集 1: paObject が初期化される場所と、到達するまでの方法は次のとおりです。setCapacity(int c)
template <Object>
ArrayClass<Object>::ArrayClass()
{
_size = 0; //default in case allocation fails
paObject = new Object[ARRAY_CLASS_DEFAULT_SIZE];
if (paObject == NULL)
throw Exception();
_size = ARRAY_CLASS_DEFAULT_SIZE;
}
私のクラス Vector が拡張する (または c++ にあるものは何でも) ことに注意することが重要な場合がありArrayClass
ますclass MyVector: virtual public ArrayClass<Object>{}
。
template <class Object>
MyVector<Object>::MyVector() : ArrayClass<Object>()
{
_currSize = 0;
_incFactor = 5;
}
ArrayClass コンストラクターの呼び出しを強制します。
template <Object >
void MyVector<Object>::setCapacity(int c)
{
int len = _currSize;
if (len > c) len = c;
Object* paNew = new Object[c];
if (paNew == NULL) throw Exception();
for (int i = 0; i < len; i++)
paNew[i] = paObject[i];
if (paObject != NULL)
delete[] paObject;
paObject = paNew;
_size = c;
if (_currSize > len)
_currSize = len;
}
エラーが発生した場合、c の6
値は であり、_currSize (クラスのプライベート int 変数) の値は です1
。また、paObject は、エラーが発生するまでにサイズ 1 のオブジェクトの配列で初期化されたオブジェクト型 (テンプレートなど) のクラス ポインターであることに注意してください ( Object* paObject = new Object[1]
)。
エラーが発生する行に到達するまで、すべてが正常に実行されdelete[] paObject;
ますExpression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
。
私は何が悪いのか真剣に理解していません。助けていただければ幸いです。