我正在研究Linked List类.每当我编译时,我都没有错误或警告.但是,可执行文件停止工作(使用Windows Dev C++).我推断出问题是我的析构函数.
我的理解是使用delete关键字为动态创建的对象调用析构函数,或者每当对象超出堆栈中对象的作用域时.
我认为我的问题发生在我的堆栈对象(Node*result)调用析构函数时,但不是很确定.
这是我的头文件:
#ifndef Node_H
#define Node_H
class Node{
int data;
Node* next;
public:
Node(int data);
~Node();
void insert(int d);
Node* remove(int d);
void removeDups(void);
Node* add(Node* a, Node* b);
void printOut(void);
};
#endif
Run Code Online (Sandbox Code Playgroud)
重新启动.cpp文件的部分:
#include <iostream>
#include "Node.h"
using namespace std;
Node::Node(int d){
data = d;
next = NULL;
}
Node::~Node(){
Node* n = this;
Node* delptr;
while(n->next != NULL){
delptr = n;
n = n->next;
delete delptr;
}
delete n;
}
void Node::insert(int d){ …Run Code Online (Sandbox Code Playgroud) 最初我的代码看起来像这样:
std::map< std::pair<int,int>, std::vector<Class0*> > aMap;
Run Code Online (Sandbox Code Playgroud)
有效.现在我的代码看起来像这样:
std::map< std::pair<Vec3f, Vec3f>, std::vector<Class0*> > aMap;
Run Code Online (Sandbox Code Playgroud)
它不再正确映射(编译正常).为什么?我该如何解决这个问题?
编辑:这里的流行需求是3D矢量(3个浮点数)的比较代码:
class Vec3f {
...
bool operator () ( const Vector3f& v0, const Vector3f& v1 ) const {
return std::tie(v0[0], v0[1], v0[2]) < std::tie(v1[0], v1[1], v1[2]);
} ...
Run Code Online (Sandbox Code Playgroud)
从这个问题重载运算符集.上面的比较适用于一组,但显然不适合一对.为什么?