首先我不会使用全局变量,这是一种邪恶。
如果您不知道需要多少对象/变量,您有两个选择,要么使用某个容器,要么动态分配内存。
我建议使用容器,但首先是关于动态分配。在 Cmalloc
和free
C++ 中new
以及delete
. C 类型分配给你一块内存,C++ 类型做同样的事情并调用构造函数和析构函数,我建议使用 C++ 分配器。
如何使用它:
Object *ptr; //pointer to some object
ptr = new Object; //creating one object
delete ptr; //deleting that object, destructor called and memory deallocated
ptr = new Object[n]; //created n objects, to reach any of them just use array index
delete [] ptr; //deleted array. n destructors called all memory freed
如果您创建对象数组,请不要使用delete
没有[]
.
所以这是关于你自己的分配器。在您的情况下,使用vector
可能是最好的选择。但我再说一遍,全局变量是个坏主意。我建议在调用函数时传递对它的引用。
C++中函数原型的几种方式
/*1*/foo(Object obj); //value of given object will be copied it's slow but sometimes we need that
/*2*/foo(Object *obj); //passing pointer more C type. Fast but unsafe.
/*3*/foo(Object &obj); //C++ passing reference. It is the same as passing pointer but it is C++ type declaration, it is safer because you won't pass NULL and you won't go out of memory
/*4*/foo(const Object *obj);
/*5*/foo(const Object &obj); //Same as before one is C type, another C++ type (unsafe and safer). Keyword `const` means what value won't be changed.
对这些函数的调用如下所示:
Object obj;
/*1*/foo(obj);
/*2*/foo(&obj);
/*3*/foo(obj);
/*4*/foo(&obj);
/*5*/foo(obj);
所以回到你的问题。
如果您真的想使用全局变量,那么您需要调整容器的大小。在你的情况下,elements.resize(size);
但我不会使用全局数据,所以我的选择是:
typedef std::vector<CIwUIButton> ButtonVector; //in big projects typedef makes us to type less :)
size_t size = <value read above>;
ButtonVector buttons(size); //You will need default constructor to initialize all buttons
我在您的代码中看到了一个指针,不确定您想用它做什么,但我认为没有必要。
顺便说一句,您应该阅读有关 STL 容器的信息,因为 C++ 和 JAVA 不同。特别是阅读vector
和deque
。在您的情况下vector
可能会更好,但是deque
您提到的情况要ArrayList
好得多。deque
vector
编辑 如果你真的想开始用 C++ 编程,你也应该看看boost
你的情况scoped_array
,shared_ptr
可能会有用。