Coding changes the world.

data structure

堆和栈的区别

堆和栈的区别
从管理方式上:栈是由编译器自动管理,无需我们手动控制;
对于堆,开辟和释放工作由程序员控制,所以有内存泄漏等情况的发生。
从申请大小上:栈是有高地址向低地址扩展的,是一块连续的内存区域,所以栈的栈顶地址或者大小 是一开始就分配好的。在使用过程中,比如递归调用层数过多,那么就有可能造成栈溢出,所以栈能获得的空间比较少;
堆是向高地址扩展的,是链表组织的方式,所以有可能是不连续的,他的大小只受限于有效的虚拟内存大小,所以堆能开辟的空间较大。
从碎片问题上:栈是没有碎片的情况,因为他有严格的出栈入栈,不会存在一个内存块从栈的中间位置弹出;
堆有碎片的情况,频繁的调用new/delete分配释放内存,必然会造成内存碎片。

Continue reading

class

实现一个不能被继承的类

1、方法一 将其构造函数声明为私有的

最直观的解决方法就是将其构造函数声明为私有的,这样就可以阻止子类构造对象了。但是这样的话,就无法构造本身的对象了,就无法利用了。
既然这样,我们又可以想定义一个静态方法来构造类和释放类。

#include
using namespace std;
class A
{
    public:
       static A* Construct(int n)
       {
           A *pa = new A;
           pa->num = n;
           cout<<"num is:"<num<num<

2、方法二 利用友元不能被继承的特性,可以实现这样的类。

Continue reading