搜索谷歌和stackoverflow 2天后,我还没有发现任何东西
我使用Java大约一年了,因此决定在C ++上创建一个游戏练习
在Java中,这应该可以工作,但是在C ++中,这让我大吃一惊。
我有这个代码
Item* inventory = new Item[24];
它是存放物品的阵列(库存)
当我动态分配数组时,其所有位置都为空?如果没有,我可以使它们全部为空吗?
这就是在第一个空位置添加项目(拾取项目)的代码
void Inventory::addItem(Item it){
if(isFull()){
cout << "Full inventory" << endl;
}else{
for(int i = 0; i<length; i++){
if(inventory[i] == nullptr){ // need this to work somehow
inventory[i] = it;
}
}
}
}
它必须是数组而不是向量,因为它具有固定的大小
当我动态分配数组时,其所有位置都为空?如果没有,我可以使它们全部为空吗?
C ++中没有像Java中那样存在null对象的东西。您可以nullptr
改用一个指针。在您的情况下,对象是默认构造的,因此不为null。
它必须是数组而不是向量,因为它具有固定的大小
除非绝对必要,否则您通常不希望动态分配。使用的std::array
,如果你真的想要一个固定大小的数组。
我建议将std::array
结合使用与std::unique_ptr
:
std::array<std::unique_ptr<Item>, 24> arr;
默认情况下,所有的std::unique_ptr
旨意是nullptr
。当您需要分配对象时,您可以执行以下操作:
arr[i] = std::unique_ptr<Item>(new Item(...));
您甚至可以为智能指针创建别名:
using item_ptr = std::unique_ptr<Item>;
这将帮助您将代码重写为:
std::array<item_ptr, 24> arr;
arr[0] = item_ptr(new Item(...));
或者,您也可以使用boost::optional
(或std::optional
从C ++ 14开始):
std::array<std::optional<Item>> arr;
您将能够使用以下命令检查特定i
元素是否为“ null”(在Java中):
if (arr[i])
// not null
并且您可以通过以下方式分配值:
arr[i] = Item(...);
与检索*arr[i]
,arr[i]->member_function(...);
或arr[i]->member_object
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句