Я использую эти два класса
// 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
гораздо более подходящее и эффективное по разным причинам, чем просто вектор
(не копировать каждый раз, возможность решать, копировать ли (не) объекты ...)