Начал переписывать свой проект со swift на C++ и посыпались проблемы, от которых я уже отвык. Начнем по порядку.
В С++ невозможно сделать массив ссылок. Ни массив, ни контейнер из STL ссылки не поддерживают.
Объекты достаточно большие, копировать их не хочется. В классы передаются ссылками. Морочится с указателями, new и delete не вдохновляет. Что делать?
Берем smart_ptr. Начинаются проблемы. В smart_ptr нельзя обернуть this. Точнее можно, при условии если унаследовать специальный класс, если гарантировать, что объект создан через smart_ptr.
То есть, использовать smart_ptr везде нельзя. Остается зоопарк из ссылок и smart_prt.
Делаем контейнер из smart_ptr и узнаем, что он не понимает иерархию классов. Надо вручную приводить добавляемый в контейнер объект к родительскому классу.
Получается вот такая сложная конструкция:
std::vector<std::shared_ptr<Object>> Objects;
someObject= std::make_shared<SomeObject>();
Objects.push_back(std::static_pointer_cast<Object>(someObject));
То же самое на Swift:
var objects = [Objects]()
let somObject = SomeObject()
objecs.append(someObject)
И никаких «;» «<>». При том, что мы сразу получаем массив ссылок. Объекты не копируются и не надо городить над ними ничего лишнего.
