クラス車両のインスタンス番号をインスタンス化していると仮定できます。車両オブジェクトが何らかの理由(例えば最も近い車両を見つける)で他の既存の車両を照会したい場合、クラスは以下のコードのように静的メンバーおよびメソッドを通じてインスタンス化されたオブジェクトを管理すべきですか?これは良いデザインパターンですか?これは共通の基準ですか?私がこのアプローチをとると落とし穴はありますか?クラスはインスタンス化されたオブジェクトを管理する必要がありますか?
#include <vector>
#include<algorithm>
struct Location {
double x, y, z;
Location(double xx, double yy, double zz) : x(xx), y(yy), z(zz) {}
};
class Vehicle {
private:
Location l;
public:
Vehicle (Location ll) : l(ll) {
vv.push_back(this);
}
static std::vector<Vehicle*> vv;
~Vehicle() {
std::vector<Vehicle*>::iterator it;
// removing the Vehicle object from the list of existing vehicles
for (it = vv.begin(); it != vv.end(); it++){
if (*it == this) {
vv.erase(std::remove(vv.begin(), vv.end(), this), vv.end());
}
}
}
Vehicle& find_nearest_vehicle() {
// code to iterate through list of existing vehicles and find the nearest vehicle
}
};
static std::vector<Vehicle*> vv;
余分な空白行をすべて削除して、それほどスクロールする必要はありません。 – mkrieger1
これはアプローチであり、時には正しいアプローチです。私たちはあなたがこれをどのように使用するのかを見なければなりません。しかし... ... 'vv.push_back(これ);'は痛みを引き起こす可能性があります。自動割り当てと動的割り当ての両方を 'vv'に追加することができます。誰がこのリストを掃除する責任があり、範囲外になる自動割り当てをどのように管理する予定ですか?作成して追加する工場を考えてみましょう。あなたがそのルートに行くなら、なぜマネージャークラスではないでしょうか? – user4581301
これは、プログラムに車両のマスターセットが1つだけ存在するように強制します。それは少し制限があるようです。また、内部の静的なものに加えて他の外部のセットを* *持つこともできますが、それは私に重複しているようです。私はこのデザインが非常に具体的で、おそらくあいまいなニーズに合っていると思うだろう。 – Galik