繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM