我正在用cocos2d-x制作游戏。游戏中我想要存储在一个类中的不同对象(我不知道这是一个好主意,但所以我可以给每个对象很多属性)。然后我从对象中创建一个数组,为此我需要一个自己的数据结构,在那里我可以推送和弹出我的对象。我试着编写这个数据结构,但我认为我的推送功能有问题(我想动态增加数组大小),特别是删除[]?不会破坏我存储的对象指针吗?
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;
};
伯特
答案 0 :(得分:1)
正如评论所指出的......你应该节省一些时间和精力,并尝试使用标准模板库(STL)。
如果您坚持修复此代码,我认为您应该在删除后尝试引用对象列表,看看它是否仍在那里......也许这个任务......
objectList = tmpObjectList;
......是不能容忍的。
相反...... 尝试构建一个复制构造函数“public Object(Object copiedObject){}”,创建一个2X大小的新Object * [],填充它,然后摆脱旧的...而不删除objectList分配你的新对象* []到它...
其余对我来说似乎很好......希望这会有所帮助。
答案 1 :(得分:0)
delete [] objectList;
这只释放objectList
指向的数组。它不释放该数组中的任何对象。