It is clearly not a good practice to put raw pointers in std containers. Your type is valid but you have somewhere an unwanted copy that is not authorized. You need to find that part of the code and force a move operation instead.
on EDIT : you probably wants to return by reference like this :
std::array<std::unique_ptr<tp::QuadTree>, 4> const & get_children() const { return children; }
If you want to extract the values and remove them from the initial member, then force a move operation :
std::array<std::unique_ptr<tp::QuadTree>, 4> extract_children(){ return std::move(children); }