如果我的命名不正確,請原諒/糾正我。我不知道const_cast
的使用。一般來說,在我看來,如果你必須使用const_cast
,那麼你的類/方法可能從根本上有缺陷unless you're using legacy functions that aren't 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
會導致性能下降?
「可變」不是設計缺陷的標誌。它就在那裏,例如,對象可以緩存值,而不是在每次需要時重新計算它們。 –
我刪除了對'mutable'的引用,因爲它對問題沒有任何貢獻。當然有時它的使用被稱爲for。 – Phlucious
而不是擺弄Java設計模式,可以考慮只使用C++ **小對象分配器**,如Loki庫中的一個。例如,使用Java方法,您不能使用'std :: unique_ptr'和'std :: shared_ptr'的默認值。從而對正確性和工作量產生負面影響 –