所以我有以下类方法(如果需要,可能会添加更多):
编辑 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;
}
发生错误时,c6
的值为 _currSize(类私有 int 变量)的值为1
. 值得注意的是,paObject 是一个 Object 类型的类指针(它是一个模板......等等),在错误发生时使用大小为 1 的 Objects 数组进行了初始化(Object* paObject = new Object[1]
)。
一切都执行得很好,直到它到达该行时delete[] paObject;
它给了我一个Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
错误。
我真的不明白出了什么问题。帮助将不胜感激。