STL自带的swap方法有什么问题?


template<typename T>
void swap(T& a,T& b)
{
T temp(a);
a = b;
b = temp;
}

涉及到指针的时候:

两个类指针会共享一个空间,如果中间销毁了其中的一个指针所指向的内存对象,则另一个对象的指针会变成野指针,触发错误。


image.png

解决方案:

myclass& operator=(const myclass& mc)
{
val = mc.val;
letter = new char[strlen(mc.letter)+1];
strcpy(letter,mc.letter);
return *this;
}

swap对两个指针的操作

Node*p1=new Node();
p1->num=1;
Node*p2=new Node();
p2->num=2;

p1->l=p2;
p2=p1->l;
swap(p1,p2);

相当于交换了两个指针的地址。p1访问的都是p2的内容还有指针地址。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,797评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,794评论 1 32
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 9,789评论 0 11
  • 首先觉得最近错过了很多好的文章和书。最近四五年因为各种原因,父母工作,虽然浏览网页但并没有专门学习方法论,这本书给...
    鹰展翅阅读 3,203评论 0 0
  • 培养 只有通过我们慢慢地培育,慢慢地引导,新的市场才会逐渐得到人们的承认,并日益发展壮大。 浙江省江山市有位个体户...
    叶乎阅读 3,130评论 0 0