gpt4 book ai didi

C++ 动态增加对象数组的数组大小?

转载 作者:行者123 更新时间:2023-11-28 06:43:32 24 4
gpt4 key购买 nike

我正在使用 cocos2d-x 制作游戏。我想将游戏中的不同对象存储在一个类中(我不知道这是否是个好主意,但这样我就可以为每个对象赋予很多属性)。然后我从对象中创建一个数组,为此我需要一个自己的数据结构,我可以在其中推送和弹出我的对象。我尝试编写此数据结构,但我认为我的推送功能做错了(我想动态增加数组大小),尤其是 delete []?这不会破坏我存储的对象指针吗?

对象数组.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;
}

对象.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 copiedObject){}”,创建一个 2X 大小的新对象*[],填充它,然后摆脱旧的和...不删除 objectList 将新的 Object*[] 分配给它...

其余的对我来说似乎很好......希望这有帮助。

关于C++ 动态增加对象数组的数组大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com