Допустим, у меня есть этот объект:
struct foo {
std::unique_ptr<int> mem;
virtual ~foo() = default;
};
Я больше не могу возвращать объект foo
, созданный в функции:
foo make_foo() {
foo result;
result.mem = std::make_unique<int>({});
return result;
}
Как можно заметить, мне нужно, чтобы деструктор был виртуальным, потому что это будет базовый класс. Но даже если я использую деструктор по умолчанию, этого недостаточно, я все равно не могу вернуть объект, созданный в функции.
Я получаю сообщение об ошибке:
error C2280: foo::foo(const foo &): attempting to reference a deleted function
Есть ли способ обойти эту проблему?
foo() = default;
,foo(foo &&) = default;
иfoo &operator=(foo &&) = default;
. Конструктор перемещения не будет генерироваться неявно, если вы определили оператор присваивания перемещения, копирующий конструктор/оператор присваивания или деструктор. - person StaceyGirl   schedule 27.09.2018