1.这几天在编译代码的时候发现一个错误,是类似于以下的错误信息:
call of overloaded `swap(int&, int&)' is ambiguous
的错误信息,其中swap是我自己在一个头文件里面定义的template function.
之前也曾经遇到过这种问题,后来没有办法,就上网查了查,发现有人提到可能是由于自己写的函数可能跟STL里面的函数冲突了,导致了g++在编译的时候不知道应该用STL的还是自己定义的。
后来查了一下,果然在STL的algorithm库里面有swap的函数,和自己写的竟然一模一样。
所以以后遇到这种问题应该首先查看一下自己写的函数是不是有一些歧义或者和默认的库冲突的地方。
2.在使用algorithm库的sort函数的时候,由于不知名的原因而导致我写的game崩溃。用gdb调试了很久都没有找到原因。先说明一下代码的情况。
首先我使用了安全指针类型,是从另一个源代码里面引用过来的。定义类似template<class T> class Ref;
当使用Ref<Node> a的时候,和声明一个Node *a一样,只是在new了一个变量之后,可以不用管理delete的时。到一定的时候,安全指针会自动帮你释放。
而当我建了一个deque< Ref<Node> > nodes;之后,也创建了一个用来比较Ref<Node> cmpNode的函数类之后,
在调用sort(nodes.begin(), nodes.end(), cmpNode);的时候,会出现SIGSEGV的错误,这个貌似是和sort内部实现有关,由于sort在内部可能会新建Ref<Node>用作临时变量,而且在不使用的时候显示的使用了delete。所以导致我的程序内存错误。
具体的有时间研究研究STL的内部实现~~