系统相关
首页 > 系统相关> > C++多态是否一定要使用指针分配动态内存?

C++多态是否一定要使用指针分配动态内存?

作者:互联网

“在C++语言中,当我们使用基类的引用或指针调用一个虚成员函数时,会执行动态绑定。”–c++ primer15.3
根据上面这句话,c++并没有规定多态必须使用动态内存。**即栈和堆内存的指针和引用都可以进行多态。**利用栈上(stack)指针使用多态:

class Base
{
    public:
        virtual void Display()= 0;
};

class Derived:public Base
{
    public:
        void Display()
        {
            cout << "In derived" << endl;
        }
};

int main()
{
    Base*   base;
    Derived derived1;

    base = &derived1;
    base->Foo();       
    return 0;
}

但是有时候往往被迫使用堆空间(heap)的指针进行多态:
典型的例子是工厂模式:


void doSomething(int what) {
    // figure out which implementation to create
    Base * b;
    if(doA) {
        b = new ConcreteA; // 1a
    } else if(doB) {
        b = new ConcreteB; // 1b
    }
    ...
    b->...; // 2
}

你不能使用栈。1a和1b离开作用域时,你从栈中得到的每一个存储都会被回收。你必须使用堆,因为你需要一些能维持局部范围的存储。
这也就是C++primer第12.1.1节p403页使用动态内存的第二个原因–“程序不知道所需对象的准确类型”。

标签:void,多态,C++,Base,动态内存,使用,public,指针
来源: https://blog.csdn.net/xinxiangwangzhi_/article/details/123628618