C++学习笔记(4)

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的内部实现~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值