gpt4 book ai didi

c++ - 我的复制构造函数有什么问题?

转载 作者:行者123 更新时间:2023-11-30 01:27:03 24 4
gpt4 key购买 nike

为什么在复制构造函数时会崩溃?

在您将在我的类定义中找到的复制过程中,我确保将创建为某个其他原始队列拷贝的队列在复制开始之前为空:假设队列 q1 不为空并且我想把 q1 变成 q2。我想在将 q2 的内容复制到 q1 之前清空 q1 的内容..

#include <iostream>
#include <string>
#include <cassert>

using namespace std;

class Dnode
{
public:
Dnode(int);
int n;
Dnode* l, *r;
};

Dnode::Dnode(int tx)
{
n = tx;
l = r = NULL;
}

class Queue // reminder: insertions at the rear, deletions at the front
{
public:
Queue();
void enqueue(int x);
int dequeue(void);
bool empty(void) const;
void display(void) const;
Queue(const Queue&); //copy constructor

private:
Dnode* front, *back;
void copy(Dnode*);
void free();

};

Queue::Queue()
{
front = back = NULL;
}


void Queue::enqueue(int x)
{
Dnode* d = new Dnode(x);
if (empty())
front = back = d;
else
{
back->r = d;
d->l = back;
back = d;
}
}

int Queue::dequeue(void)
{
assert(! empty());
Dnode* temp = front;
front = front->r;
if (front == NULL)
back = NULL;
else front->l = NULL;
int x = temp->n;
delete temp;
return x;
}


bool Queue::empty(void) const
{
return front == NULL;
}

void Queue::display(void) const
{
for (Dnode* d = front; d != NULL; d = d->r)
cout << d->n << " ";
cout << endl;
}

void Queue::copy(Dnode* dn) // "dn" will be "Front" of Queue being copied
{ // this procedure will be called in Copy Constructor
Dnode* temp=front; // found underneath this procedure
while(front!=back)
{
front=front->r;
delete temp;
temp=front;
}

delete temp;

front=back=temp=NULL;

if(dn!=NULL)
{
while(dn->r!=NULL)
{
enqueue(dn->n);
dn=dn->r;
}
enqueue(dn->n);
}
}

Queue::Queue(const Queue& x)
{
copy(x.front);
}

int main()
{
Queue q;
if (q.empty()) cout << "q empty" << endl;

for (int i = 0; i < 10; i++) q.enqueue(i);

q.display();

int x = q.dequeue();

cout << "x is " << x << endl;

q.display();

Queue q1(q); //<----program crashes when we get here

q1.display();
}

最佳答案

您将复制构造函数与赋值运算符混淆了。在赋值运算符中,您必须删除当前队列并将其替换为第二个参数的拷贝。但这是一个复制构造函数。没有当前队列。您的成员未初始化。因此,当您开始尝试删除现有队列时,您会弄乱未初始化的指针。

关于c++ - 我的复制构造函数有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439326/

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