
而且我记得,数组完成初始化以后,应该不能再添加了吧。
只能从新定义一个数组。。。或者直接使用容器不是更方便么。自身还定义了迭代器
你可以这样:private中只要声明一个char* ptr(或者void* ptr)
然后一次性new一块 raw memory, 具体方法是ptr = new[ sizeof(Base)*SIZE]然后每增加一个base到数组中的时候再初始化, 具体方法是 Base* myBase = new(ptr) Base(10)//这里调用的构造函数是 base(int d):_d(d) {},然后再ptr = ptr + sizeof(Base)
这就解决了你所说的性能问题,当然,这里析构的时候就比较麻烦,你得要显式的先调用存放在内存块中的base析构函数,然后再delete掉内存块,使用delete[]
大概觉得你是新手,所以多说一句new(ptr) Base(10)这个是placement new
参考代码如下://////////////////////////////////////////////////////////////////////////////
//类定义
class CPolygon
{
public:
CPolygon(int num)
virtual ~CPolygon()
float GetArea()//取得面积
BOOL SetPoint(int point,float x,float y)//设置第point个点的坐标
private:
BOOL Check() //检查是否有数据没有设置
intpCount //边数,也就是顶点数
float *px //顶点x的数组
float *py //顶点y的数组
BYTE *pv //设置数据标志
}
//////////////////////////////////////////////////////////////////////////////
//类实现
CPolygon::CPolygon(int num)
{
if(num<3) //至少是三角形
{
px=NULL
py=NULL
pv=NULL
pCount=0
}
else
{
px=new float[num] //按num开辟内存
py=new float[num]
pv=new BYTE[num]
memset(px,0,sizeof(float)*num)//初始化内存
memset(py,0,sizeof(float)*num)//初始化内存
memset(pv,0,sizeof(BYTE)*num)//初始化内存
pCount=num
}
}
CPolygon::~CPolygon() //用完要回收开辟的内存
{
if(px) delete []px
if(py) delete []px
if(pv) delete []px
px=NULL
py=NULL
pv=NULL
}
BOOL CPolygon::SetPoint(int point,float x,float y)
{
if(point>=0&&point<pCount) //点在范围内
{
*(px+point)=x
*(py+point)=y
*(pv+point)=1//置1,表示数据已经设置过了
return TRUE
}
return FALSE
}
BOOL CPolygon::Check() //检查合法性
{
if(pCount==0)
return FALSE
for(int i=0i<pCounti++)
{
if(*(pv+i)==0)
return FALSE
}
return TRUE
}
float CPolygon::GetArea()
{
if(Check()) //如果数据准备好
{
//计算结果
//返回结果
}
return 0.0//数据没准备好就返回0.0
}
//////////////////////////////////////////////////////////////////////////////
//类调用,以三角形为例
CPolygon xObject(3)//定义一个三角形
xObject.SetPoint(0,20.2,30.3)//设置第一点的值
xObject.SetPoint(1,80.4,50.5)//设置第二点的值
xObject.SetPoint(2,70.6,40.7)//设置第三点的值
float Result=xObject.GetArea()
CString Info
if(Result==0.0)
Info="计算有错误,请检查设置的点是否正确!"
else
Info.Format("三角型的值是:%f",Result)
MessageBox(Info) //显示结果
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)