[英]C++ dynamically increase array size for object-array?
我正在用cocos2d-x制作游戏。 我想将游戏中的不同对象存储在一个类中(我不知道这是否是个好主意,但是我可以为每个对象赋予很多属性)。 然后,我用对象制作一个数组,为此,我需要一个自己的数据结构,可以在其中推送和弹出对象。 我试图编写此数据结构,但是我认为我的推入功能做错了(我想动态增加数组大小),尤其是delete []? 那不会破坏我存储的对象指针吗?
ObjectArray.h:
#pragma once
#include "C:\Cocos\Projects\FirstGame\proj.win32\anObject.h"
class ObjectArrayList
{
public:
ObjectArrayList(int c);
ObjectArrayList();
virtual ~ObjectArrayList(void);
void push(anObject *obj);
void pop(int id);
int findIndex(int id);
int getSize();
int getCapacity();
private:
int capacity;
int size;
anObject **objectList;
};
ObjectArray.cpp:
#include "ObjectArrayList.h"
#include <iostream>
using namespace std;
objectArrayList::ObjectArrayList(int c)
{
size=0;
capacity = c;
objectList = new anObject*[capacity];
}
ObjectArrayList::ObjectArrayList() {
}
ObjectArrayList::~ObjectArrayList(void) {
}
void ObjectArrayList::push(anObject *obj) {
if(size < capacity) {
} else {
int newCap = 2*capacity;
anObject **tmpObjectList = new anObject*[newCap];
for(int i = 0;i<capacity;i++) {
tmpObjectList[i] = objectList[i];
}
delete [] objectList;
objectList = tmpObjectList;
capacity = newCap;
}
objectList[size] = obj;
size++;
}
void ObjectArrayList::pop(int id) { //not finish yet
if(size != 0) {
size--;
}
}
int ObjectArrayList::findIndex(int id) {
return id;
}
int ObjectArrayList::getSize() {
return size;
}
int ObjectArrayList::getCapacity() {
return capacity;
}
anObject.h:
#pragma once
#include "cocos2d.h"
class anObject
{
public:
anObject(int hp_init, int x, int y);
anObject();
virtual ~anObject(void);
void decreaseHp();
int getHp();
void setMyPosition(int x, int y);
cocos2d::Sprite *getMySprite();
private:
cocos2d::Sprite *mySprite;
int hp;
int midX;
int midY;
int isX;
int isY;
};
伯特
正如评论所指出的那样……您应该节省一些时间和精力,并尝试使用标准模板库(STL) 。
如果您坚持要修复此代码,我认为您应该尝试在删除后引用对象列表,以查看它是否仍然存在……也许是这项工作……
objectList = tmpObjectList;
...是不能容忍的。
而是...尝试构建一个副本构造函数“ public Object(Object copyedObject){}” ,制作一个2X大小的新Object * [],填充它,然后摆脱旧的...而无需删除objectList Assign您的新对象* [] ...
其余的对我来说似乎很好...希望这会有所帮助。
delete [] objectList;
这只会释放objectList
指向的数组。 它不会释放该数组中的任何对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.