Нет, вам не нужно ничего делать, потому что вы не управляете никакими ресурсами. Вы пишете «большую тройку» только тогда, когда управляете ресурсом, но vector
делает это. Это тот, у которого правильно написана Большая Тройка, просто используйте его.
Вот почему принцип единой ответственности является ключевым в управлении ресурсами: если у вас есть класс, который правильно управляет ресурсом, вы можете просто использовать его, не беспокоясь об этом ресурсе снова. Всегда отделять управление ресурсами от использования ресурсов.
Причина, по которой вам нужна большая тройка, написанная в управляющем классе, заключается в том, что специальные члены по умолчанию обычно делают не то, что нужно (они копируют, присваивают, уничтожают значения вместо того, на что они управляют / на что указывают.) Но как только вы ресурс обернут (как в std::vector
), все просто отлично. По умолчанию будет скопирован вектор, , но , что копирование записано правильно.
Кстати, Большая Тройка в контексте управляет ресурсами (копирует и уничтожает ресурсы), а не создает их. Так что это будет конструктор копирования, назначение копирования и деструктор, а не конструктор по умолчанию.
Для вашей информации, вот как вы это сделаете:
class planets
{
public:
// ...
//copy constructor
planets(const planets &p) : // use an initialization list to initialize
mass(p.mass), // copy-construct mass with p.mass
radius(p.radius) // copy-construct radius with p.radius
{
// what you had before just made a local variable, copy-constructed
// it with p.xxx, then got released (nothing happened to your members)
}
//destructor
~planets()
{
// nothing to do, really, since vector destructs everything
// right for you, but you yes, you would delete any resources
// you managed here
}
};
Но не забывайте оператор копирования-назначения. Я рекомендую идиома копирования и обмена и оставлю это в качестве упражнения для вас.
(Помните, что вам на самом деле это не нужно.)