gpt4 book ai didi

c++ - 析构问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:05:27 24 4
gpt4 key购买 nike

这是我的 addCard 函数,它以一个 playingCard 作为参数,然后将其自身的地址传递给分配给 playingCard 对象的指针数组。

void cardHand::addCard(playingCard card) {
theHand[nElems++] = &card;
} // addCard()

现在,当我运行我的程序时,它运行良好,但在调用析构函数时崩溃。

cardHand::~cardHand() {
for(int c = 0;c<MAX;c++) {
if(theHand[c] != NULL)
delete theHand[c]; // here is the problem
}
delete [] theHand;
} // class destructor

是不是崩溃了,因为我只是在addCard函数中交出了playingCard对象的地址。它应该是一个指针吗?

最佳答案

问题就在这里

void cardHand::addCard(playingCard card) { theHand[nElems++] = &card; } }

您存储将在 addCard 方法结束时销毁的临时卡片对象的地址。

然后在您的析构函数中您尝试再次删除它。

你有两个选择。

首先:让addCard只接受卡片配置,并在addCard方法中使用new创建你的卡片。
第二:通过指针接受卡片,但你的 cardHand 的析构函数不能负责删除卡片。删除将执行创建所有卡片的 Deck 对象。

关于c++ - 析构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1081868/

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