为什么将变量类型p声明为新类型而不是将其声明为类型p?

时间:2016-03-17 13:54:52

标签: c++ pointers destructor declaration

以下是我正在分析的一大块代码。由于我是初学者C ++程序员,我不明白为什么所有者的代码将 node-point 类型的变量声明为 node * p = new node ,而不仅仅是声明它为 node * p 。在我看来,两种方法都会产生相同的行为。我错了吗?如果是这样,为什么?

class Queue {
    private:
        node *front;
        node *rear;
    public:
        Queue();
        ~Queue();
        bool isEmpty();
        void enqueue(int);
        int dequeue();
        void display();

};

void Queue::display(){
    node *p = new node;
    p = front;
    if(front == NULL){
        cout<<"\nNothing to Display\n";
    }else{
        while(p!=NULL){
            cout<<endl<<p->info;
            p = p->next;
        }
        cout << endl;
    }
}

感谢。

EDITED 现在,我还有其他问题。下面的代码是Queue类的析构函数,正如我们所看到的,所有者的代码决定在类型指针节点的变量 front 上使用运算符 delete 。根据我所做的读数,运算符 delete 应该与operator new配对使用,或者换句话说,只需要释放由程序员直接分配的内存(delete)(新)。那么,为什么所有者的代码使用删除。这是另一个错误吗?

Queue::~Queue() {
    delete front;
}

1 个答案:

答案 0 :(得分:3)

假设构造node的默认没有副作用,无论你写node *p还是node *p = new node,程序的行为都是一样的,因为p是在下一行重新分配。

但是,由于new node创建的对象永远不会被删除,因此Queue::display每次调用时都会泄漏内存。您好像在代码中发现了一个错误。可以通过删除new node并将p初始化为front来修复,因为我怀疑作者并不知道他在做什么。

node *p = front;