我在使用 C++ 中的内置指针时遇到了问题。当我的程序终止时,我的类析构函数都会被调用。我有一个数据类、一个队列类和另一个包含使用队列的数据类,如下所示(注意即时粗略编码):
class Data {
int x;
}
class Queue {
class Node {
Data* x;
}
Node* head;
}
class C1 {
Queue q;
}
class C1Queue{
class Node {
C1* c;
}
Node* head;
}
我还有另一个队列 q2,它不驻留在对象中。我从一个文件中加载了两个队列,所以我说的是(假设 cQueue 是一个 C1Queue):
Data *d = new Data(0);
q2->pushBack(d);
C1 c = new C1();
cQueue->pushBack(c->pushBack(d));
如您所见,我有一个队列 (q2) 持有指向每个数据的指针,以及一个具有队列的对象,该队列持有指向与 q2 持有的相同数据的指针。现在,当我的程序终止时,我希望释放所有数据。但是,当对象被释放时,要么首先释放 q2,当要释放 C1 对象时,它们释放队列,然后删除与刚刚删除的 q2 相同的数据。或者另一种情况是首先释放对象(我不确定发生哪种排序),然后释放 q2 并运行到已删除的内存中。
所以问题是内存空间被删除了两次,不好。一旦内存被删除,它就会被释放给其他程序使用,因此再次删除该内存空间将导致段错误。
也许我在这里遗漏了一些东西,但是如果没有特殊类型的指针(我不能使用特殊类型的指针),我无法弄清楚如何做到这一点。
我能想到的唯一方法是阻止 C1 对象释放它的队列,但释放它本身的其余部分,但我不知道该怎么做。如果有人可以帮助我,那么我将不胜感激。