摘要:
1、为了保证不会重复释放内存,auto_ptr的copy构造和copy赋值都是破坏性操作,执行后,导致右操作数的指针为0。这就出现了,copy构造或者copy赋值后,两个对象不相等了。2、auto_ptr的问题就是,一块内存只能有一个指针指向它,为了解决这个问题,使用share_ptr。3、share_ptr是如何实现的? a、内部有一个指向原始资源的指针。 b、内部维护一个share_count,记录有多少个指针指向该内存。 c、析构的时候,share_count>1,将计数减1;share_count==1释放内存。 d、考虑到每个share_ptr中都有一个自己的share_co. 阅读全文
posted @ 2013-10-21 19:09
Andy Niu
阅读(1107)
评论(0)
推荐(0)
摘要:
1、 int *pi = new int(1024); delete pi; // 释放pi指向的int对象占用的内存空间 pi = 0; // 将pi设置为0,不指向任何东西,为Null 注意:删除0值的指针是安全的,但是没有任何意义。对于上面的情况,先释放内存,再置为Null。顺序不能颠倒,如果颠倒了,会导致内存泄漏。2、在Stack上分配的内存,用完后,系统会自动释放,调用析构方法。在Heap上,通过new分配内存,必须使用delete,手动释放内存,如果忘记,会导致内存泄漏。如果重复释放内存,会破坏自由存储区,导致分配在上面的其他对象受到破坏。(Stack记录程序的执行过程,H... 阅读全文
posted @ 2013-10-21 18:56
Andy Niu
阅读(322)
评论(0)
推荐(0)
浙公网安备 33010602011771号