Нет, вам не нужен деструктор для C
, но вам нужен конструктор копирования (а также конструктор перемещения, оператор назначения копирования и оператор перемещения-назначения) для класса B
, если Вы хотите правильно реализовать семантику копирования. Как и сейчас, если бы вы сделали копию объекта класса B
, вам пришлось бы обращаться к объектам, указывающим на один и тот же массив - при уничтожении объектов вы получите двойное удаление, вызывающее неопределенное поведение.
Вам не нужно использовать необработанный указатель. Вы можете просто использовать std::vector
, который будет обрабатывать распределение элементов, а также их уничтожение. Это также означает, что вам не нужно реализовывать какие-либо другие конструкторы или деструктор для B
, поскольку std::vector
обрабатывает копии и перемещается правильно.