Я пытаюсь создать сущность, которая может содержать указатель на своего родителя и вектор на своих потомков.
Проблема в том, что когда я пытаюсь emplace_back или push_back для вектора детей, я получаю
Error C2280 'Entity::Entity(const Entity &)': attempting to reference a deleted function
Из-за того, что в Entity у меня есть unique_ptr.
Я думал, что добавление конструктора перемещения решит эту проблему, но это не так.
Ниже я включил минимальный проверяемый исполняемый пример.
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
struct Entity
{
//////// data
unique_ptr<Entity> mParent;
std::vector<Entity> mChildren;
//////// ctors
// default
Entity() = default;
// move
Entity(Entity && entity): mParent{std::move(entity.mParent)}{}
//////// functions
void add_child(Entity const && entity)
{
mChildren.emplace_back(entity); // COMMENT OUT THIS LINE FOR FUNCTIONAL CODE
//Error C2280 'Entity::Entity(const Entity &)': attempting to reference a deleted function in... include\xmemory0 881
};
};
int main()
{
Entity entity;
entity.add_child(Entity());
return 0;
}