Использование const_cast в заводской модели

Прости / поправь меня, если моя номенклатура неверна.

Я никогда не понимал использование 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 привести к снижению производительности?

0

Решение

Приведет ли использование const_cast к снижению производительности?

Может быть. Отбрасывание const хранить значение, когда объект на самом деле const производит неопределенное поведение. Неопределенное поведение может проявляться, помимо прочего, в снижении производительности.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]