Предположим, у нас есть шаблонный класс списка c ++.Да, вектор существует, но суть заключается в том, чтобы знать, как решить эту проблему.
Конструктор выделяет блок из n объектов типа T, но не инициализируется, поскольку они еще не используются.
В методе add мы хотим скопировать новый объект, но использование operator = невозможно, поскольку operator = сначала уничтожит существующий объект, который никогда не был инициализирован.Как копировать один объект в данные [используемые]?
#include <string>
template<typename T>
class DynArray {
private:
int capacity;
int used;
T* data;
public:
DynArray(int initialCap) : capacity(initialCap), used(0), data((T*)new char[sizeof(T)*capacity]) {}
void add(const T& e) {
//TODO: if the dynarray is full, grow
data[used++] = e; //ERROR! Should use copy constructor!!!
}
};
int main() {
DynArray<std::string> a(5);
a.add(std::string("abc"));
}