Контейнеры и ссылки

Начал переписывать свой проект со 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)

И никаких «;» «<>». При том, что мы сразу получаем массив ссылок. Объекты не копируются и не надо городить над ними ничего лишнего.

Leave a comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *