C ++, как правильно скопировать std :: vector в конструкторе копирования?

Я использую эти два класса

// This is generic data structure containing some binary data
class A {
public:
    A();
    A(const A&);
    ~A();
}

// Main data container
class B {
public:
    B();
    B( const B&);
    ~B();
protected:
    std::vector<A *> data;
}

// Copy constructor for class b
B::B( const B& orig):data() {
    for( std::vector<A *>::const_iterator it = orig.data.begin();
        it < orig.data.end(); ++it){
        data.push_back( new A( *(*it)));
    }
}

Думаю, этот класс справится со своей задачей, но я нахожу способ достичь в этом полного совершенства.

Сначала : data () - требуется ли эта инициализация для правильной инициализации пустого вектора (и это часть написания хорошего и чистого кода)?

Как использовать vector :: итератор в конструкторе копирования, единственный способ, который я нашел, - это тот, который я написал в коде (константа должна быть обязательной для конструктора копирования).

Копирование только вектора приведет к копированию только значений указателя, а не целых объектов?

И, наконец, инициализация новых данных ... Есть ли способ заменить весь цикл меньшим фрагментом кода и / или существует ли какой-либо стандарт как написать конструктор копирования для std :: container, который содержит указатели на объекты ?

Подвопрос: я предполагаю, что использование vector гораздо более подходящее и эффективное по разным причинам, чем просто вектор (не копировать каждый раз, возможность решать, копировать ли (не) объекты ...)

9
задан Lol4t0 14 January 2012 в 22:32
поделиться