Вы можете написать это без typedef:
struct Region
{
bool hasPoly;
long size1;
long size2;
long size3;
long size4;
long size5;
long size6;
long meshRef;
std::vector<int> PVS;
}; // no typedef required
Чтобы ответить на ваши вопросы:
Является ли вектор в этой декларации действительным
Да, это так.
или имеет смысл сделать указатель на вектор.
Нет, вероятно, нет. Если бы вы это сделали, вам пришлось бы реализовать конструктор копирования, оператор присваивания и деструктор для поведения копирования. В конечном итоге вы получите то же самое, но это будет дополнительная работа и потенциальные ошибки.
В случае указателя на вектор, нужно ли выделить новый вектор. Как мне это сделать?
Вам потребуется реализовать конструктор копирования , оператор присваивания и деструктор :
// Copy constructor
Region(const Region & rhs) :
hasPoly(rhs.hasPoly),
// ... copy other members just like hasPoly above, except for PVS below:
PVS(new std::vector<int>(*rhs.PVS))
{
}
// Copy assignment operator
Region & operator=(const Region & rhs)
{
if (this != &rhs)
{
hasPoly = rhs.hasPoly;
// ... copy all fields like hasPoly above, except for PVS below:
delete PVS;
PVS = new std::vector<int>(*rhs.PVS);
}
return *this;
}
// Destructor
Region::~Region()
{
delete PVS;
}
Итог: ваш код в порядке. Вам не нужно менять его.
РЕДАКТИРОВАТЬ: Исправить оператор присваивания: проверить сравнение с этим и вернуть * это.