К сожалению именно shared, там дальше много локальных указателей на этот объект
Где то сам шаред копируется ?
Да он копируется через приравнивание
Там move оператор присваивания, а это O(1) сложность
Даже между двумя shared_ptr? В учебнике видел пример без move
Видишь мув? А он есть. Ты же через make_shared создаешь временный объект, rvalue и он обрабатывается move оператором присваивания.
#include <iostream> #include <memory> // для std::shared_ptr class Item { public: Item() { std::cout << "Item acquired\n"; } ~Item() { std::cout << "Item destroyed\n"; } }; int main() { // Выделяем Item и передаем его в std::shared_ptr auto ptr1 = std::make_shared<Item>(); { auto ptr2 = ptr1; } Так второй объект создаётся без make_shared
Здесь один обьект шарится между ptr1 и ptr2, но этот пример отличается от исходного
К сожалению, shared не для этого был создан
А прям сильно важно, чтобы другие указатели были владеющими? Зачастую это не нужно
Локальные - не страшно
Обсуждают сегодня