[英]Bad design to keep track of objects instances with a static vector c++?
我正在使用的代碼是從傳感器類創建一堆對象。 當應用程序收到諸如“報告所有損壞的傳感器”之類的問題時,我將借助傳感器類中的靜態向量迭代所有傳感器對象。
public:
static std::vector<Sensor*>objList;
bool isBroken
std::vector<Sensor*>Sensor::objList;
Sensor::Sensor(ComponentId, component Id....){
...
objList.push_back(this);
...
}
Sensor::IsBroken(){
isBroken = adValue == broken
}
然后我們可以回復
bool Logger::BrokenSensors(std::string ComponentName){
for ( auto i = Sensor::objList.begin(); i != Sensor::objList.end(); i++ ) {
if((*i)->GetStringId()==ComponentName){
return (*i)->isBroken;
}
}
return 0;
}
這被認為是不好的做法嗎? 我想不出更好的方法來做到這一點。 此外,傳感器對象是從一堆不同的地方創建的。
是的,這個設計可以改進。 您應該考慮將傳感器與系統擁有的傳感器數量分開。 引入一個負責管理傳感器生命周期的SensorManager
,讓你的Sensor
類只關心傳感器應該做什么。
class SensorManager
{
// maybe use a map<sensorid, shared_ptr<Sensor>> here instead?
vector<shared_ptr<Sensor>> sensors;
public:
void Add( /* parameters */ )
{
sensors.push_back(make_shared<Sensor>( /* parameters */ ));
}
vector<shared_ptr<Sensor>> GetBrokenSensors()
{
// Your logic goes here.
}
void RemoveSensor( /* some sort of Id */ )
{
// remove this sensor from sensors.
}
// rest of stuff
};
我在這里留下了很多公開的細節,比如你的傳感器是共享的還是唯一的,它們的使用壽命是如何控制的,它們是如何識別的等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.