Нет, это, конечно, даже удаленно безопасный способ сделать это.Когда вы делаете new MyStruct<T>[count]
для не POD T
, каждый объект MyStruct<T>
в массиве уже создается по умолчанию, что означает, что конструктор для члена object
вызывается автоматически.Затем вы пытаетесь выполнить конструкцию на месте (путем инициализации значения) поверх этого.Результирующее поведение не определено.
Та же проблема существует с удалением.
Чего вы пытаетесь достичь?Просто сделайте new MyStruct<T>[count]()
(обратите внимание на дополнительный пустой ()
), и он уже выполнит инициализацию значения для каждого элемента массива (именно то, что вы пытаетесь сделать «вручную» впоследствии).Почему вы чувствуете, что должны делать это при построении на месте?
Аналогично, когда вы делаете
delete[] this->structPool;
, он автоматически вызывает деструктор для каждого члена MyStruct<T>::object
в массиве.Не нужно делать это вручную.