Всякий раз, когда вы пишете один из конструктора копирования, оператора копирования или деструктора, вы должны выполнять все три. Это Большая тройка, а предыдущее правило - Правило трех.
Прямо сейчас, ваш конструктор копирования не делает глубокую копию. Я также рекомендую использовать идиому копирования и обмена всякий раз, когда вы реализуете «Большую тройку». * На самом деле ваш operator=
неверен.
Возможно, это учебное упражнение, но вы всегда должны давать классы ответственно. Прямо сейчас у вас есть два: управление ресурсом памяти и Matrix
. Вы должны разделить их так, чтобы у вас был один класс, который обрабатывает ресурс, и другой, который использует указанный класс для использования ресурса.
Этот служебный класс должен будет реализовать Большую тройку, но пользовательскому классу на самом деле не нужно будет реализовывать ни один из них, потому что неявно сгенерированные будут обрабатываться должным образом благодаря служебному классу.
Конечно, такой класс уже существует как std::vector
.