Szukałem, ale nie mogłem znaleźć odpowiedzi na to pytanie. Czy istnieje sposób, aby powiedzieć operatorowi new
na nie wywoływać konstruktorów klas?Niezainicjowana tablica instancji klasy C++
MyObject* array = new MyObject[1000];
To zadzwoni MyObject()
tysiąc razy! Chcę samodzielnie wypełnić przydzieloną pamięć i nie potrzebuję żadnych informacji zainicjowanych w konstruktorze. Używanie malloc()
nie jest bardzo harmonicznym kodem C++ imho.
MyObject* array = (MyObject*) malloc(sizeof(MyObject) * 1000);
Dzięki za odpowiedź. Jakiekolwiek wady używania rzutowania w stylu C nad 'static_cast'? Składnia budowy była dla mnie nowością. Szybkość jest kluczem, nie sądzę, że mapa pasuje, ponieważ naprawdę potrzebuję liniowej tablicy z ustaloną liczbą elementów. –
@Niklas W tym przypadku nie ma żadnych wad. Rzut w stylu C jest zdefiniowany jako pierwszy z zestawu rzutów, które się powiodą. W tym przypadku będzie to odpowiednik 'static_cast'. Wolę jednak być jednoznaczny. Ponadto istnieje mnóstwo informacji o Stack Overflow na temat nowej składni miejsca docelowego. –
@NiklasR Aby się upewnić: czy chcesz tworzyć obiekty sekwencyjnie (począwszy od indeksu 0 i wyższego), czy też dowolne pozycje w tablicy? Jeśli chcesz je sekwencyjnie, powolna odpowiedź 'std :: vector' jest odpowiednia. –