Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O parâmetro de ponteiro compartilhado é passado pela referência rvalue. Em vez disso, passe pelo valor.
Diretrizes principais do C++: R.34: Utilize um parâmetro shared_ptr<widget> para expressar propriedade compartilhada
Passar um ponteiro compartilhado por referência de rvalue raramente é necessário. A menos que seja uma implementação da semântica de movimento para um tipo de ponteiro compartilhado em si, os objetos de ponteiro compartilhados podem ser passados com segurança pelo valor. O uso de referência rvalue também pode ser uma indicação de que um ponteiro único é mais apropriado, uma vez que transfere claramente a propriedade exclusiva do chamador para o destinatário.
Observações
Esta verificação reconhece
std::shared_pointere tipos definidos por utilizador que provavelmente se comportarão como ponteiros partilhados. As seguintes características são esperadas para ponteiros compartilhados definidos pelo usuário:operadores de desreferenciação ou acesso de membros sobrecarregados (públicos e não excluídos);
um construtor de cópias ou um operador de atribuição de cópias (público e não excluído);
um destrutor público que não é eliminado ou predefinido. Os destrutores vazios ainda são contados como definidos pelo utilizador.
Exemplos
Otimização questionável do construtor:
action::action(std::shared_ptr<transaction> &&t) noexcept // C26416
: transaction_(std::move(t))
{}
action::action(std::shared_ptr<transaction> &t) noexcept // also C26417 LVALUE_REF_SHARED_PTR
: transaction_(t)
{}
Otimização questionável do construtor - simplificada:
action::action(std::shared_ptr<transaction> t) noexcept
: transaction_(std::move(t))
{}