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

时间:2014-08-24 07:14:27

标签: c++

我正在用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;
};

伯特

2 个答案:

答案 0 :(得分:1)

正如评论所指出的......你应该节省一些时间和精力,并尝试使用标准模板库(STL)

如果您坚持修复此代码,我认为您应该在删除后尝试引用对象列表,看看它是否仍在那里......也许这个任务......

objectList = tmpObjectList;

......是不能容忍的。

相反...... 尝试构建一个复制构造函数“public Object(Object copiedObject){}”,创建一个2X大小的新Object * [],填充它,然后摆脱旧的...而不删除objectList分配你的新对象* []到它...

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

答案 1 :(得分:0)

delete [] objectList;

这只释放objectList指向的数组。它不释放该数组中的任何对象。