Как лучше использовать поля класса? C++
Есть константа myConst, которую нужно вывести. Каким способом лучше всего её использовать:
class MyClass {
public:
const int myConst = 10;
};
int main() {
MyClass* myclass = new MyClass();
std::cout << myclass->myConst << std::endl;
delete myclass;
return 0;
}
или
class MyClass {
public:
static const int myConst = 10;
};
int main() {
std::cout << MyClass::myConst << std::endl;
return 0;
}
Какая между ними разница? Пока могу заметить, что во втором случае myConst будет существовать всё время существования программы из-за ключевого слова. А в первом случае из-за использования кучи, операции производимые с myclass будут медленнее
Ответы (1 шт):
В первом примере myConst является нестатической константой члена класса. Это означает, что каждый объект MyClass будет иметь свою копию myConst. И даже с учётом того, что значение константы одинаково для всех экземпляров, оно занимает отдельное место в памяти для каждого экземпляра.
В вашем втором примере myConst объявлена как static const int. Получается, что myConst существует в единственном экземпляре независимо от количества объектов MyClass и является частью класса, а не отдельных объектов. Доступ к ней осуществляется через имя класса, а не через объекты, что удобно для констант, значение которых общее для всех экземпляров класса. Это также уменьшает потребление памяти, так как не требует выделения отдельной памяти под каждый экземпляр класса.
Получается что ответ на ваш вопрос:
Во втором примере, управление памятью оптимизировано лучше и выше производительность.