我有一个包含颜色属性的类,我想使用枚举来处理它。因为在运行时我的程序可能会创建这个类的数千个实例,哪里是声明枚举以优化内存使用的最佳位置?
目前,我的班级声明如下:
class Node
{
public :
//constructors, methods, etc...
enum class Color : char{WHITE, GREY, RED, GREEN}
protected :
//Some private attributes
Color _color = Color::WHITE;
};
我知道这是一种可以接受的方式,我的问题是:当我得到100k这类课程时会不会带来表演?
答案 0 :(得分:1)
我猜你在class
vs enum class
的声明中关注enum
。
enum class
和旧样式enum
将生成完全相同的代码,并且在编译器的“后端”中表现完全相同。区别在于编译器的语义分析(类型检查)(与“传统”enum
类型相比更严格的检查,因此您无法执行int x = WHITE;
或enum { A, B }; Color c = A;
)。< / p>
答案 1 :(得分:1)
与任何数据类型一样,枚举本身不会在您的对象中占用存储空间,它会存储枚举的实例 。 (关于这一点,enum
和enum class
之间没有区别。)因此,将枚举移出课堂并没有在这方面有任何区别。
因此,在您的情况下,color_
成员会占用存储空间。如果存在您不需要的子类,您可能需要重新考虑您的课程设计。否则,你没事!