Ваш учитель ищет список инициализатора конструктора . Это позволяет инициализировать элементы перед запуском конструктора:
template< typename NODETYPE >
VectorList< NODETYPE >::VectorList()
: vList(new std::vector)
{
}
Это стандартный способ инициализации членов, поскольку он эквивалентен инициализации во время объявления для нормальных переменных, например,
int a(3); // Calls int constructor with 3. Note int a = 3; does same (no call to operator=)
Если у вас была переменная члена класса , объявленная как int a;
, инициализация не может быть выполнена при объявлении, но помещение ее в конструктор запускает после объект уже создано. Это действительно присваивание, и оно происходит с использованием operator=
вместо конструктора объекта. Это эквивалентно:
int a; // Create an int
a = 3; // Uses operator= to do assignment
Обратите внимание, что вы using namespace std;
в том, что я предполагаю, является файлом заголовка; это плохая идея, поскольку она загрязняет пространство имен любого файла, который #include
является вашим заголовком, и может потенциально привести к конфликтам имен (и, таким образом, к незначительным ошибкам). После удаления этой строки вам необходимо добавить префикс std::
перед объявлением vector< NODETYPE >
.
Наконец, в коде, который вы выложили до сих пор, нет необходимости выделять vList
в куче (с новым), когда вы можете иметь обычный векторный объект в качестве переменной-члена:
vector< NODETYPE > vList;
Это упростит ваш код и уменьшит вероятность появления незначительных ошибок управления памятью. Вам больше не понадобится ваш список инициализаторов, и деструктору тоже нечего будет делать. Кроме того, вам не придется беспокоиться об определении собственного конструктора копирования и оператора присваивания, чтобы сделать копирование и присвоение безопасными / работать должным образом.