我正在为一个中级编程课做作业。我们正在创建一个Cluster类,其中每个Cluster对象都包含Point类中的对象。 Cluster对象的 swipeableView.didStart = {view, location in
if self.cardIndex+1 < self.swipeableView.numPrefetchedViews {
self.cardIndex++
}
}
成员指向LNode对象链接列表的头节点,每个LNode指向一个Point对象:
points
当我尝试重载赋值运算符来处理像Cluster1 = Cluster2这样的表达式时,我的问题出现了。为了防止内存泄漏,我想删除Cluster1指向的整个LNode-s链表,以及每个LNode指向的每个Point。这看起来很简单:
namespace Clustering {
typedef Point *PointPtr;
typedef struct LNode *LNodePtr;
struct LNode {
PointPtr p;
LNodePtr next;
};
class Cluster {
private:
int size;
LNodePtr points; // points to head LNode
但是,我的代码只能在没有// Overload assignment operator
Cluster& Cluster::operator =(const Cluster& otherCluster) {
// checks for equality
if (this == &otherCluster)
return *this;
size = otherCluster.size;
// delete old nodes
if (points != nullptr) {
LNodePtr discard = points;
points = nullptr;
LNodePtr advance = discard->next;
do {
cout << "flag " << *(discard->p) << endl;
delete discard->p; // this line should delete the Point
delete discard;
discard = advance;
if (advance != nullptr)
advance = advance->next;
} while (discard != nullptr);
}
行的情况下运行。当我包括那条线时,我会得到奇怪的行为。有时,程序将删除每个LNode的Point,直到最后一个LNode,该行导致程序崩溃。我在delete discard->p;
行之前放置了一个输出标志,以确认我想要删除的点仍然存在(确实如此)。在其他时候,delete
行会导致程序的其他部分失败。
我很感激任何人都可以提供帮助。我试图搜索有关此问题的其他问题,但我找不到任何东西。