Давайте предположим, что у нас есть что-то вроде этого:Конструктор: unique_ptr + движение против shared_ptr
struct Complex{
Complex(Part1 p1, Part2 p2, Part3 p3)
}
Part1 p1;
Part2 p2;
Part3 p3;
Однако прохождение копий не является эффективным, так что мы должны двигаться к указателям. Вопросы, какой тип использовать — unique_ptr
или shared_ptr
На первый взгляд, так как Complex
является реальным владельцем p1, p2, p3
, кажется unique_ptr
лучше; однако, поскольку он не может быть скопирован, нам нужно будет использовать std::move
.
Так что мой вопрос —, что это лучший способ для этого случая, создать unqiue_ptr
из Part
, а затем использовать move
в Complex
«s конструктора, или создать shared_ptr
из самого начала и использовать shared_ptr
вместо этого?
* Однако передача копий неэффективна, поэтому нам нужно перейти к указателям. * Или вы сделаете сложность и часть движимыми? – stijn
Комплекс - это просто сложный, долгоживущий объект. Но на текущий момент я не планирую реализовывать «правило пяти». –
Также нет, если это решение вашей проблемы? В любом случае: умные указатели представляют собой своеобразное владение, поэтому ответ кажется простым: если p1/p2/p3 не * shared *, не используйте * shared * _ptr? – stijn