Агрегация с использованием вектора - PullRequest
1 голос
/ 12 января 2012

Я хотел бы создать агрегацию и сохранить объекты с вектором, правильно ли я написал?:

 Class A
{
  private:
           vector <B *> pB;
  public:
           A();
           A(int tag);
           ~A();
  }

  A::A(int tag){
     for (i=0; i != tag, i++)
     pB.push_back(new B());
  }

И чтобы создать не агрегацию, а композицию, мне нужно только добавить это в деструктор:

A::~A(){
       vector <B *>::iterator citer = pB.begin();
        while (citer != pB.end())
        delete *(citer++);
        pB.clear();
 }

правильно?Спасибо

Ответы [ 2 ]

2 голосов
/ 12 января 2012

вам не хватает метода для доступа к указателям, например,

B* getPtr(int iP) {
    if(iP<pB.size()) {
        return pB.at(iP);
    }
    return NULL
}

и удаления одного указателя из списка:

void delPtr(int iP) {
    if(iP<pB.size()) {
       delete pB.at(iP);
       pB.erase(pB.begin()+iP);
    }
 }
1 голос
/ 12 января 2012

Я думаю, что в вашем агрегационном случае у вас должен быть метод для добавления объекта в вектор, а не в конструктор

Тогда пользователь класса A должен правильно управлять временем жизни объектов.

Теперь ваш код для агрегации регистр неверен.У вас очевидная утечка памяти.

...