Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O parâmetro de ponteiro compartilhado é passado por referência de rvalue. Passe por valor, nesse caso.
Diretrizes principais do C++: R.34: use um parâmetro de widget> shared_ptr<para expressar a propriedade compartilhada
Passar um ponteiro compartilhado por referência rvalue raramente é necessário. A menos que seja uma implementação da semântica de movimentação para um tipo de ponteiro compartilhado, os objetos de ponteiro compartilhados podem ser passados com segurança por valor. O uso da referência rvalue também pode ser uma indicação de que um ponteiro exclusivo é mais apropriado, pois ele transfere claramente a propriedade exclusiva do chamador para o computador chamado.
Comentários
Essa verificação reconhece
std::shared_pointeros tipos definidos pelo usuário que provavelmente se comportarão como ponteiros compartilhados. As seguintes características são esperadas em ponteiros compartilhados definidos pelo usuário:operadores de acesso de membro ou de desreferência sobrecarregados (públicos e não excluídos);
um construtor de cópia ou operador de atribuição de cópia (público e não excluído);
um destruidor público que não é excluído nem definido como padrão. Destruidores vazios também são contados como definidos pelo usuário.
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))
{}