Каков самый быстрый способ преобразования std::shared_ptr>?C++

Программы на C++. Форум разработчиков
Anonymous
Каков самый быстрый способ преобразования std::shared_ptr>?

Сообщение Anonymous »

Предположим, класс D является производным от класса B. Как лучше всего преобразовать std::shared_ptr в std::shared_ptr? Решение не должно увеличивать/уменьшать счетчик std::shared_ptr и не должно копировать std::unique_ptr.
Наивный подход не работает. :

Код: Выделить всё

#include 

struct B {
virtual void msg() {
printf("BASE\n");
}

virtual ~B() = default;
};

struct D: B {
D() = default;

void msg() override {
printf("DERIVED\n");
}
};

int main() {
std::shared_ptr derivedPtr = std::make_shared(std::make_unique());
std::shared_ptr basePtr = static_cast(std::move(derivedPtr));
basePtr->get()->msg();
}
Компилятор говорит, что этот static_cast невозможен.

Подробнее здесь: https://stackoverflow.com/questions/793 ... nique-ptrt

Вернуться в «C++»