Diferença entre ATL CAutoPtr e STL std :: auto_ptr?
-
22-08-2019 - |
Pergunta
Estou a escrever algum código no MFC e eu quero usar ponteiros de automóveis. Eu me deparei com duas classes diferentes que parecem fazer a mesma coisa:? CAutoPtr
e std::auto_ptr
Quais são os pensamentos das pessoas sobre as duas implementações diferentes
Além disso, eu sei que há std::tr1::shared_ptr
. Existe uma shared_ptr
similar que está em ATL / MFC?
Solução
Ambos CAutoPtr
e auto_ptr
dará semântica ponteiro inteligente, incluindo a transferência de semântica de propriedade. CAutoPtr
é uma classe ATL - construído usando COM. É uma extensão não-padrão para um sistema operacional específico. auto_ptr
por outro lado é padrão C ++. Se você quiser usar um recipiente de tais objetos você tem que usar CAutoPtrArray
ou CAutoPtrList
.
Um ponto importante a notar é que existe algo chamado auto_ptr_ref
que lhe permite voltar auto_ptr
s como um valor de retorno. Não existe tal coisa com CAutoPtr
.
auto_ptr
está obsoleta em C ++ 0x. Use unique_ptr
se você tem que:. Você pode usá-los em recipientes mover-aware e também obter alguma segurança de movimentos implícitos inseguros de l-valores
Outras dicas
A coisa mais próxima de shared_ptr em ATL / MFC é CComPtr. Ele foi criado para ser usado em objetos COM, mas pode ser usado em qualquer classe que inclui AddRef / versão métodos de contagem de referência.
CAutoPtr é ATL específico.
std: auto_ptr e CAutoPtr ambos não fornecer contagem de referência. Parece que ambos têm a mesma funcionalidade. link de texto
Eu acho que não há nenhuma shared_ptr em ATL / MFC. shared_ptr é implementado na biblioteca de impulso.