[英]What really makes this code bad
在我的公司,我遇到了以下兩個代碼片段,我發現這些代碼片段一見鍾情,但本着向撰寫該代碼的工程師提供建設性反饋的精神,我試圖提出技術論據,為什么這段代碼是壞:
FileTableEntry * FilerManager::GetFileTableEntry(uint32_t i) const {
return &(GetFileTable()[i]);
}
…
for (uint32_t i = 0; i < container_.size(); ++i) {
*GetFileTableEntry(i) = FileTableEntry();
// GetFileTableEntry ultimately accesses a std::vector in FileManager
}
我的主要論點是:
還有其他論據不寫這樣的代碼我會遺漏嗎?
反對此代碼的另一個參數是GetFileTableEntry
的簽名在對象始終存在的情況下返回指針。 這需要引用,而不是指針:
FileTableEntry& FilerManager::GetFileTableEntry(uint32_t i) const {
return GetFileTable()[i];
}
這應該解決你的第一點。 你的第二點可以通過引用const
來解決:
const FileTableEntry& FilerManager::GetFileTableEntry(uint32_t i) const {
return GetFileTable()[i];
}
這禁止調用者修改GetFileTableEntry
返回的內部狀態。
注意:要使GetFileTableEntry
函數有用,應該添加傳入的索引的邊界檢查以及早捕獲錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.