Удалить объекты, переносимые в векторе? - PullRequest
0 голосов
/ 17 декабря 2011

В приложении C ++ я создаю в различных точках класса объекты User определенного класса Vehicle с оператором new и сразу после каждого экземпляра я помещаю их в вектор, который является свойством первого класса (то есть vector< Vehicle* > v1).

  1. Во время выполнения программы, скорее всего, мне нужно в какой-то момент удалить объекты класса Vehicle.Должен ли я использовать определенно оператор удаления?Если так, как это сделать с вектором?Есть ли предопределенная функция вектора для выполнения той же работы?Когда я их удаляю, что происходит со свойствами класса Vehicle, которые в этом случае являются указателями на другие объекты?Они также удалены?

  2. Если нет необходимости удалять их до конца программы, удаляются ли они деструктором или их следует удалить «вручную»?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2011

Вот способ C ++:

#include <memory>
#include <vector>

#include "vehicle.hpp"
typedef std::vector<std::unique_ptr<Vehicle>> vehicle_container;

#include "derivedvehicles.hpp"

int main()
{
    vehicle_container v;
    //...
    v.emplace_back(new Car);
    v.emplace_back(new Bike);
    //...
 } // baam, everything is cleaned up
0 голосов
/ 18 декабря 2011

Вот лучший способ (ИМХО):

#include <boost/ptr_container/ptr_vector.hpp>

#include "vehicle.hpp"
typedef boost::ptr_vector<Vehicle> vehicle_container;

#include "derivedvehicles.hpp"

int main()
{
    vehicle_container v;
    //...
    v.emplace_back(new Car);
    v.emplace_back(new Bike);
    //...

    v[0].go();  // Elements accessed as if they are objects (not pointers)
                // Which makes using in any of the standard 
                // algorithms trivial.

} // ta-da, everything is cleaned up
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...