【问题标题】:Is an `enum` definition inside a class shared between class instances, or copied for each instance?类内的“枚举”定义是在类实例之间共享还是为每个实例复制?
【发布时间】:2013-05-11 20:45:47
【问题描述】:
class MyClass
{
    public:
        enum ErrorCodes
        {
            ERR_SUCCESS     = 1,
            ERR_READ        = 2,
            ERR_WRITE       = 3,
            // ...
            ERR_ALLOCATE    = 99,
            ERR_DELETE      = 100
        };

        ErrorCodes DoSomething();
};

MyClass::ErrorCodes MyClass::DoSomething()
{
    // ...
    return ErrorCodes::ERR_SUCCESS;
}

在我的示例代码中,有一个很长的 enum 定义,其中包含 100 个变量。假设每个变量拥有 4 个字节的内存,enum 将使用 400 个字节的内存。一旦我开始创建这个类的对象会发生什么?每个对象会因为这个enum而消耗额外的400字节内存,还是enum会在这个类的所有对象之间共享,这样无论初始化的类实例的数量如何,都只会使用固定的400字节?

如果要为每个实例使用 400 字节的内存,在这种情况下我可以使用什么替代方法?

【问题讨论】:

  • 枚举只是数字的名称——它们不会“存储”在任何地方。

标签: c++ class optimization memory-management enums


【解决方案1】:

enum 声明不使用任何运行时内存。这只是对常量使用符号名称的一种便捷方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多