Возник такой вопрос.
Есть в C++ правило нуля.
По этому правилу для владения ресурсами вместо простых указателей нужно использовать специальные классы-обёртки, такие как std::unique_ptr
и std::shared_ptr
и не определять конструкторы перемещения/копирования и такие же операторы присваивания.
Но если я объявляю деструктор класса - то обязан объявить и выше названые конструкторы с операторами присваивания (например, в виде = default
).
Есть ли какой-то способ упростить вот этот код?
Что бы не писать каждый раз определения с = default
.
#include <iostream>
#include <memory>
struct S
{
S(void)
{
std::cout << "Constructor S" << std::endl;
}
S(const S &) = default;
S(S &&) = default;
S &operator=(const S &) = default;
S &operator=(S &&) = default;
virtual ~S(void)
{
std::cout << "Destructor S" << std::endl;
}
};
int main(void)
{
auto s = std::make_shared<S>();
return EXIT_SUCCESS;
}