gpt4 book ai didi

具有自定义对象的 C++ 数组

转载 作者:太空宇宙 更新时间:2023-11-03 10:29:25 26 4
gpt4 key购买 nike

google 和 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;
}
}
}
}

它需要是数组而不是 vector ,因为它有固定的大小

最佳答案

When I allocate dynamicly an array all of its postions are null? And if not, can I make them all null?

在 C++ 中没有像 Java 中那样的 null 对象。相反,您可以使用 nullptr 指针。在您的情况下,对象是默认构造的,因此不为空。

It needs to be array not a vector because it has fixed size

除非绝对必要,否则您通常不想动态分配。使用 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 (或来自 C++14 的 std::optional):

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.

关于具有自定义对象的 C++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21263434/

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