【发布时间】:2014-04-01 13:43:16
【问题描述】:
template <class DataType> /// Declaring the template class Datatype
class Vector
{ public:
Vector()
{m_data = new DataType[9999];
m_size = 1;
m_current = 0;
}
Vector(int size) /// Constructing vector
{ m_data = new DataType[size];
m_size = size;
m_current = -1;
}
///////////////////////////////////////
/// Creating Push and Pop methods
///////////////////////////////////////
bool push(const DataType data)
{ if (m_current < m_size)
{ m_current++;
m_data[m_current] = data;
return true;
}
else
{ return false; }
}
bool pop(DataType &data)
{ if (m_current==-1)
{ cout << "Nothing to pop";
return false;
}
else
{ data = m_data[m_current];
m_current--;
return true;
}
}
///////////////////////////////////////
/// Methods to access the private m_data
///////////////////////////////////////
float retrievefloat(int pointer)
{
return m_data[pointer];
}
string retrievestring(int pointer)
{
return m_data[pointer];
}
int retrieveint(int pointer)
{
return m_data[pointer];
}
int retrievecurrent()
{
return m_current;
}
int retrievesize()
{
return m_size;
}
private:
DataType* m_data;
int m_size;
int m_current;
};
好的,这里我们有一个自定义的模板矢量类。这里的问题是,我希望包含一个clear() 函数。我知道你可以做int m_size = 0 和int m_current = -1。但是如何重置 m_data?
当我在调用clear 函数后想再次推送数据时,尝试delete [] m_data 会使程序崩溃。
【问题讨论】:
-
实数向量分别处理内存分配和该内存中元素的构造。然后清除操作只是破坏元素,但保留分配的内存。由于您同时执行这两项操作(
new DataType[9999]),因此清除操作没有多大意义,因为您无法破坏元素(然后,delete[]将是未定义的)。如果您将delete[]改为clear,则您的容器似乎不会处于有效状态(默认构造)。