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?

Foi útil?

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_ptrs 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top