代码之家  ›  专栏  ›  技术社区  ›  Galaxy

是否为每个C++对象编译了多个成员函数?

  •  0
  • Galaxy  · 技术社区  · 6 年前

    我知道,当我们创建给定类类型的多个对象时,会创建成员变量的多个副本。每个对象都有一组单独的成员变量。对于成员函数,这是否也同样有效?如果我的类有很多函数,那么对于创建的每个对象,成员函数都会重复吗?每个创建的对象都有自己的成员函数集吗?

    class demo {
      public:
        int height;
        int width;
    
        void setheight(int height)
        {
            this->height = height;
        }
    
        void getArea() const
        {
            return height * width;
        }
    
        // 100 more member functions.
    };
    

    1 回复  |  直到 6 年前
        1
  •  3
  •   Matteo Italia    6 年前

    这只是一个实现细节(标准没有规定任何特别的内容),但在几乎所有的实现类中,方法本质上都是“常规的”自由函数的语法糖 this 作为隐藏参数 1. . 瞧,你提出的优化是编译器已经做过的。

    虚拟方法涉及到一些额外的机制,因为每个虚拟方法通常在类(及其所有派生类)的vtable中“花费”一个插槽,但同样,它是O(1)空间开销,而不是实例数的O(n)。


    1. 在里面 ecx 作为第一个参数,但这与我们的讨论无关。