gpt4 book ai didi

c++ - 在 while 循环中使用 delete 吗?

转载 作者:太空宇宙 更新时间:2023-11-04 16:12:50 24 4
gpt4 key购买 nike

我正在编写一个纸牌游戏(扑克)应用程序作为一个学习项目,并且有一个关于删除指针的问题。先介绍一下背景:

我有一个 Player 类,我想根据用户输入将其初始化一定次数。 Player 类的构造函数发牌,然后检查棋盘(在不同类别中发牌),检查玩家的最后一手牌等。所有牌都是随机发牌的(无需用户输入)。

我希望这在一个 while 循环中一遍又一遍地发生,并显示统计数据,例如谁赢了,多少次,什么手被击中等。所以我的 main() 这样做:

// GET NUMBER OF PLAYERS 
unsigned numOfPls = 1;
Player::getNumOfPls(numOfPls);

// CREATE POINTER TO numOfPls OBJECTS TYPE PLAYER
Player *p[numOfPls];
while(true){
Deck::DeckObj().shuffleDeck();
for (unsigned i=0; i<numOfPls; i++){
p[i] = new Player;
}

// DO I DELETE THIS WITH EACH WHILE ???
for (unsigned i=0; i<numOfPls; i++){
//delete p[i];
}
}
return 0;

我不确定是否应该每次都删除 p[i]。我正在阅读“Sams Teach Yourself C++”,作者说我永远不应该重用已删除的指针。但是(这里不确定)删除 p[i] 不会删除指针,而只会删除在对象数组中创建并由 p+i 指向的对象,对吗?

另一方面(如果我的上述假设是正确的)不删除它并用在另一个 while 中创建的另一个对象覆盖对象是否安全?什么是正确的做法?

另外我想不删除 *p 是可以的,因为它会在 main() 结束时被销毁? (稍后会应用某种“中断”机制)。

最佳答案

是的,如果您使用过NEW,则应始终使用DELETE :)但我确实认为你的情况太复杂了。

相反,我可能建议您让 C++ 处理这个问题,或者换句话说 - 在特定情况下使用指针要容易得多。

while(true){
Player p[numOfPls];

Deck::DeckObj().shuffleDeck();
for (unsigned i=0; i<numOfPls; i++){
// DO WHATEVER YOU WANT with the class, i.e. process data
}

} //End of the loop

关于c++ - 在 while 循环中使用 delete 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26397410/

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