При создании cars стоит указать тип vector, иначе это будет initializer_list, который несколько раз (!) будет копироваться в нормальный контейнер.
cars
будет иметь тип std::initializer_list<Car>
, но его копирование - это не проблема. std::initializer_list
является легковесной надстройкой над статическим массивом на стеке. Внутренняя реализация этого типа не стандартизирована, но практически всегда его размер не превышает двух регистров процессора. world.push_back(std::move(terr));
world
хранит std::unique_ptr<object>
, но std::move(terr)
вернет std::unique_ptr<Terrain>&&
. Чтобы в push_back
передать правильный std::unique_ptr<object>&&
будет использован конструктор преобразования (6). Это произойдет без проблем, но вот что потеряется - так это указание, какой именно деструктор нужно вызвать.vector<object>
означает вектор инстанций. Там будут храниться обособленные объекты. В частности, в коде vector<object> wld = { terr }
ты сказал неявно сузить экземпляр Terrain
до экземпляра object
и инициализировать вектор копией этого экземпляра.wld
ты мог обратиться к объекту terr
, в векторе тебе нужно хранить указатели.object
из вектора wld
ты мог получить данные о coords
, твой тип Terrain
должен оперировать полями object
, а от дубликатов этих полей в Terrain
нужно избавиться.А сейчас компилятор обращается к свойству coords класса object.
using namespace std;
. Это крайне плохая практика, если коротко. vector<object> wld = { terr };
Что то вроде:
Competition comp; comp.team.TeamChange();
Можно ли обратиться к методам класса, экземпляр которого находится в другом классе?
но на одном из тестов падает с флагом - RE
system
?