私はポインタのベクトルを格納することができ、要求に基づいてポインタのベクトルを削除することができるデザインパターンを探しています。後で使用される最初の関数によって作成されたポインタを格納するために使用するデザインパターンは何ですか?
これは私の既存のコードパスです。ここで
### implementation.h
class A {
A() {}
private:
void AggregateMetrics();
void FlushMetrics();
X* x_;
Y* y_;
};
class X {
public:
void CreateFiles(vector<B*> *objects, string path);
};
class B {
B() {
m_ = 0, n_ = 0;
}
private:
int m_, n_;
};
### implementation.cpp
void A::A() {
x_ = new X();
y_ = new Y();
}
void A::AggregateMetrics() {
}
void A::FlushMetrics() {
vector<B*> objects;
x_->CreateFiles(&objects, path);
// In my new code, we are going to move the above two lines
// to AggregateMetrics() and i need to find a way to store
// the vector<B*>objects;
y_->Flush(objects);
return;
}
void X::CreateFiles(vector<B*> *objects, string path) {
CHECK(objects.empty());
for (int i = 0; i < 10; i++) {
objects->push_back(new B());
}
}
は私の新しいコードです: ### implementation.h
class A {
A() {}
private:
void AggregateMetrics();
void FlushMetrics();
X* x_;
Y* y_;
};
class X {
public:
void CreateFiles(vector<B*> *objects, string path);
};
class B {
B() {
m_ = 0, n_ = 0;
}
private:
int m_, n_;
};
class PointerManager {
public:
PointerManager() {}
void SetPointers(vector<B*>& objects);
vector<B*> GetPointers();
private:
vector<B*>objects_;
};
### implementation.cpp
PointerManager::SetPointers(vector<B*>& objects) {
objects_ = objects;
}
vector<B*> PointerManager::GetPointers() {
return objects_;
}
void A::A() {
x = new X();
y = new Y();
mgr_ = new PointerManager();
}
void A::AggregateMetrics() {
vector<B*> objects;
x->CreateFiles(&objects, path);
mgr_->SetPointers(objects);
}
void A::FlushMetrics() {
auto objects = mgr_->GetPointers();
y->Flush(objects);
return;
}
void X::CreateFiles(vector<B*> *objects, string path) {
CHECK(objects.empty());
for (;;) {
objects->push_back(new B());
}
}
私は基本的に作成した後、これらのポインタを保持することができ、必要なときに返すことができますPointerManagerと呼ばれる新しいクラスを作成しています。ここで理想的なデザインは何でしょうか?デザインパターンを提案できますか?
これはhttp://codereview.stackexchange.com/questions/tagged/c%2b%2bに投稿することをお勧めします。 例を完全にコンパイル可能にする必要があります(現在は完全ではありません)。 –
完了。適切なクラスメンバーを持つようにコードを編集しました。 – user1159517
生ポインタ=不良。 unique_ptrを使用してください。コンストラクタのbody = badのポインタを初期化しています。初期化リスト構築を使用する。 –