在工厂模型中使用const_cast

时间:2012-12-13 23:14:21

标签: c++ qt factory const-cast

如果我的命名不正确,请原谅/纠正我。

我从未理解const_cast的用法。一般来说,在我看来,如果你必须使用const_cast,那么你的类/方法可能存在根本上的缺陷unless you're using legacy functions that aren't const-correct。然而,我可能偶然发现了一个适当使用的情况。我有一个庞大的类,有几个成员在构造期间分配,并且对象的使用寿命保持不变。

因为这些对象经常被破坏和构建,我想试验我认为所谓的工厂模型:而不是创建/销毁对象,我想检索/返回到未分配对象的缓存。例如(简化,当然):

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会导致性能下降吗?

1 个答案:

答案 0 :(得分:0)

  

使用const_cast会导致性能下降吗?

也许。当对象实际上const时,抛弃const来存储值会产生未定义的行为。未定义的行为可以表现为性能损失等。