私の命名法が間違っている場合は、許してください/修正してください。
の使い方がいまいち理解できませんでしたconst_cast
。一般的に言えば、const-correct ではないレガシー関数を使用していない限り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
するとパフォーマンスが低下しますか?