Wektor w najlepszym podejściu do konstrukcji? C ++
Próbuję zawrzeć wektor w mojej strukturze.
Oto moja struktura:
struct Region
{
bool hasPoly;
long size1;
long size2;
long size3;
long size4;
long size5;
long size6;
//Mesh* meshRef;// the mesh with the polygons for this region
long meshRef;
std::vector<int> PVS;
} typedef Region;
Czy wektor w tej deklaracji jest prawidłowy, czy też bardziej sensowne byłoby utworzenie wskaźnika do wektora. W przypadku wskaźnika do wektora, czy przydzielić nowy wektor. Jak mam to osiągnąć?
Podziękować!
Edycja: Problem polega na tym, że powoduje to błąd wskazujący na xmemory.h, plik będący częścią platformy MSVC ++.
void construct(pointer _Ptr, _Ty&& _Val)
{// construct object at _Ptr with value _Val
::new ((void _FARQ *)_Ptr) _Ty(_STD forward<_Ty>(_Val));// this is the line
}
Co ciekawe, nie dzieje się tak, gdy izoluję go poza strukturą i tylko w funkcji, której używam. Jakieś pomysły?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Aby odpowiedzieć na Twoje pytania:
Czy wektor w tej deklaracji jest prawidłowy?
Tak to jest.
lub byłoby rozsądniej zrobić wskaźnik do wektora.
Nie, najprawdopodobniej nie. Gdyby tak było, musiałbyś zaimplementować konstruktor kopiujący, operator przypisania i destruktor dla zachowania kopiowania. Skończysz z tym samym, ale będzie to dodatkowa praca i może prowadzić do błędów.
W przypadku wskaźnika do wektora, czy przydzielić nowy wektor. Jak mam to osiągnąć?
Będziesz musiał wdrożyć
konstruktor
biurowy
, operator przypisania
kopiowanie i
burzyciel
:
Konkluzja: twój kod jest w porządku. Nie musisz niczego zmieniać.
EDYCJA: Napraw operator przypisania: sprawdź porównanie z tym i zwróć * to.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Jeśli chcesz skopiować wektor i dane podczas kopiowania struktury , pozostaw je bez wskaźnika.
Jeśli nie chcesz, aby został skopiowany, potrzebujesz jakiegoś wskaźnika wektorowego.
Jeśli używasz wskaźnika do wektora, musisz bardzo uważać na bezpieczeństwo wyjątków alokacji/cofania alokacji. Jeśli nie możesz pokryć swojej alokacji w bezpieczny sposób, pozostawiasz możliwość wycieków pamięci.
Istnieje kilka opcji:
Anonimowy użytkownik
Potwierdzenie od:
W kodzie produkcyjnym niektórzy woleliby, aby do zdefiniowania tej klasy używać słowa kluczowego zamiast słowa kluczowego , tak jak robi to element członkowski to nie jest POD. Jeśli jesteś autorem własnego poradnika stylistycznego, nie masz się czym martwić.
Jednak jest błędne, po prostu napisz