ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2022-03-21 10:33:20  阅读:178  来源: 互联网

标签:void 多态 C++ Base 动态内存 使用 public 指针


“在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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有