0

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

我一直不明白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导致性能下降吗?

4

1 回答 1

0

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

也许。const当一个对象实际上是const产生未定义的行为时,丢弃以存储一个值。除其他外,未定义的行为可能表现为性能下降。

于 2012-12-13T23:20:12.743 回答