[c ++]缺少析构函数

时间:2013-12-28 21:39:33

标签: c++

当我声明一个像这样的新队列对象时,exe停止工作:

arrayQueue myQueue;  
myQueue.enqueue("111");  
char* x=myQueue.dequeue();  
cout<<x<<endl;

当我使用new创建对象时,它可以工作:

arrayQueue* myQueue=new arrayQueue();  
myQueue->enqueue("111");  
char* x=myQueue->dequeue();  
cout<<x<<endl;

那么问题是什么?以下代码是我写的“队列”:

在.h头文件中:

class arrayQueue{  
private:  
    array<char*,100> queueContrainer;  
    int maxSize;  
    int head;  
    int tail;  
public:  
    arrayQueue();  
    ~arrayQueue();  
    bool isEmpty();  
    bool isFull();  
    int getSize();  
    void enqueue(char*);  
    char* dequeue();  
};
在.cpp中实现

(仅在此处上传构造函数:

arrayQueue::arrayQueue(){  
    head=0;  
    tail=0;  
    maxSize=100;  
    for(array<char*,100>::iterator it1=queueContrainer.begin();it1!=queueContrainer.end();++it1){  
        *it1="Empty";  
    }  
}

的main.cpp; arrayQueue.cpp; arrayQueue.h。要编译的三个文件:

  

https://drive.google.com/file/d/0B5FCKG1I8ce0R1RORUFYWFhUN0E/edit?usp=sharing
  https://drive.google.com/file/d/0B5FCKG1I8ce0QlBCTzdBUlJfZG8/edit?usp=sharing
  https://drive.google.com/file/d/0B5FCKG1I8ce0SGdWOVg1RzNTNW8/edit?usp=sharing

2 个答案:

答案 0 :(得分:0)

在第一行

queue myQueue;

您正在创建一个类型为'queue'的对象,可能是std :: queue,它没有'enqueue'或'dequeue'方法。

答案 1 :(得分:0)

你有一个有效的析构函数吗?在第二个示例中,myQueue指向的对象不会被删除,并且析构函数永远不会被调用。

在第一个示例中,myQueue在超出范围时被删除,并且将自动调用析构函数。如果您的构造缺失或有缺陷,程序将无法编译或运行。