Прости / поправь меня, если моя номенклатура неверна.
Я никогда не понимал использование const_cast
, Вообще говоря, мне кажется, что если вы должны использовать const_cast
тогда ваш класс / методы, вероятно, в корне неверен если вы не используете устаревшие функции, которые не являются правильными. Я, возможно, наткнулся на случай, когда его использование уместно, однако. У меня большой класс с парой членов, которые назначаются во время строительства и остаются постоянными для полезная жизнь объекта.
Поскольку эти объекты часто разрушаются и создаются, я бы хотел поэкспериментировать с так называемой фабричной моделью: вместо создания / уничтожения объекта я хотел бы получить / вернуть его в кэш неназначенных объектов. Например (упрощенно, конечно):
class PersonFactory {
public:
const Person* getPerson(const QString& newname) {
//I can't assign the new name because it's const
if(m_personCache.isEmpty())
return createNewPerson();
else
return m_personCache.pop();
}
void returnPerson(Person* person) { m_personCache.push(person); person = 0; }
static PersonFactory* instance;
private:
Person* createNewPerson() const { return new Person(""); }
QStack<Person*> m_personCache;
}
class Person {
public:
friend Person* PersonFactory::createNewPerson();
const QString& name() const {
return m_name;
}
void destroy() {
PersonFactory::returnPerson(this);
}
private:
Person(QString name) : m_name(name) {}
//m_name is const and should remain that way to prevent accidental changes
const QString m_name;
}
Я не могу присвоить новое имя, потому что это const
, Это хороший случай для const_cast
или я упускаю очевидную альтернативу? Будет использовать const_cast
привести к снижению производительности?
Приведет ли использование const_cast к снижению производительности?
Может быть. Отбрасывание const
хранить значение, когда объект на самом деле const
производит неопределенное поведение. Неопределенное поведение может проявляться, помимо прочего, в снижении производительности.
Других решений пока нет …