【发布时间】:2018-05-04 11:50:15
【问题描述】:
我有一个std::vector<Item*> listOfItems,它保存着指向Item 对象的指针。
Item的构造函数我有两个参数,
Item::Item(std::string name, int amount)
{
itemName = name;
ownerAmount = amount;
}
我还有Player 对象,它有一个成员变量std::vector<Item> ownedItems。
我在我的主文件中创建了一个向量,其中包含指向各种 Player 所拥有的所有 Item 对象的指针,声明如下:
std::vector<Item*> itemList = listOfItems(players);
在哪里
std::vector<Item*> listOfItems(std::vector<Player*> players) {
std::vector<Item*> listOfItems itemList;
for (int i = 0; i < players.size(); i++) {
for (int j = 0; j < players.at(i)->getAllCountries()->size(); j++) {
itemList.push_back(&players.at(i)->getAllCountries()->at(j));
}
}
return itemList;
}
声明后,我正在运行我的 Player 的策略,即:
player1->executeStrategy(&itemList);
现在在我的玩家的 doOperation(遵循策略模式)中声明如下:
void HumanPlayerStrategy::doOperation(Item* x, std::vector<Item*> *itemList){
attackerVictory(x, itemList);
}
我正在运行函数attackerVictory,它带有指向main 中声明的itemList 的指针,以及指向不同Player 拥有的各种Item 的所有指针(为了修改这些)。
唯一的问题是,在我在attackerVictory 中完成操作后,添加到itemList 的任何Item 都有空白成员变量值。
我似乎无法理解为什么这不起作用?
这是我的攻击者胜利函数:
void Strategy::attackerVictory(Item* x, std::vector<Item*> *listOfItems) {
Item temp = *x;
/* set different member variable values for the Item temp */
listOfItems->push_back(&temp);
}
如果listOfItems 带有空的itemName 和ownerAmount 值,那么这样做最后会给我Item。我在这里错过了什么?
【问题讨论】:
-
了解迭代器失效
-
不要不存储指向内部向量项的指针。如果调整该向量的大小,您存储的那些指针可能会变得无效。示例:
vector<int> x; x.push_back(10); int *ptr = &x[0]; x.push_back(20);如果向量x改变大小,ptr可能不会指向有效内存。 -
你将指针推送到堆栈变量...繁荣
标签: c++ c++11 pointers vector strategy-pattern