1. C++中的堆对象与栈对象
1.1静态建立
Type a这种方式就是静态建立,静态建立一个类对象,是由编译器为对象在栈空间中分配内存,通过直接移动栈顶指针挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。
1.2动态建立
A* p = new A( )这种方式为动态建立。动态建立类对象,是使用new运算符将对象建立在堆空间中,在栈中只保留了指向该对象的指针。
1.3 两者区别
静态建立的对象是基于栈之中的,所以当栈被释放时,相应的变量也会被释放。如局部变量,是在一个函数刚执行时产生的栈中,在函数执行完毕时,相应的栈也会被释放,所以局部变量也会被释放。在之前的一个程序中,我们一个函数内用静态建立定义了一个数组,进行相应的操作后将数组返回给主函数,结果却被告知指针未定义。后来才知道,那个数组在子函数结束后也被自动释放了,所以那片内存区域变为了未定义的内存区域。所以遇到这种情况就需要使用动态建立,但是动态建立需要我们手动释放或者在程序结束后由操作系统负责释放,否则会造成内存泄漏。
2. 对C++中虚函数的最初认识
虚函数的提出是为了多态性的问题。就我目前认知而言,多态性是指我们对不同的具体对象,都可以用父类进行统一表达,也就是说可以用同一父类的指针进行表达,而且在调用方法时又能根据不同具体子类的变化而相应改变。值得注意的是,使用多态特性,都要使用指针。因为不同子类的大小是不一定的,若直接使用容器,就会切割不同子类的实例,而使用指针则会避免这个问题。
3. 父类,(抽象基?)
父类的设计需要定义一个空的虚函数,也就是纯虚函数,这有利于统一。同时需要定义一个虚的析构函数,这也是为了能够正确调用子类的析构函数。
网友评论