Compartilhar via


MFC ASSERT_VALID e CObject::AssertValid

Este tópico se aplica a:

Edição

Visual Basic

C#

C++

Desenvolvedores Web

Express

Somente nativo

Padrão

Somente nativo

PRO e equipe

Somente nativo

Legenda de tabela:

Aplica-se

Não é aplicada

Comando ou comandos oculta por padrão.

The CObject::AssertValid método fornece verificações de time de execução do estado interno de um objeto.Embora não sejam necessárias para substituir AssertValid Quando você deriva a classe de CObject, você pode tornar sua classe mais confiável, fazendo isso. AssertValid deve executar declarações em membro variáveis todos os do objeto para verificar se eles contêm os valores válido. Por exemplo, deve verificar que as variáveis de membro ponteiro não são nulo.

O exemplo a seguir mostra como declarar um AssertValid função:

class CPerson : public CObject
{
protected:
    CString m_strName;
    float   m_salary;
public:
#ifdef _DEBUG
    // Override
    virtual void AssertValid() const;
#endif
    // ...
};

Quando você substituir AssertValid, chame a versão de classe base de AssertValid antes de executar suas verificações. Em seguida, use a macro de declaração para verificar sistema autônomo membros exclusivos para sua classe derivada, sistema autônomo mostrado aqui:

#ifdef _DEBUG
void CPerson::AssertValid() const
{
    // Call inherited AssertValid first.
    CObject::AssertValid();

    // Check CPerson members...
    // Must have a name.
    ASSERT( !m_strName.IsEmpty());
    // Must have an income.
    ASSERT( m_salary > 0 );
}
#endif

Se qualquer uma das variáveis de membro armazenar objetos, você pode usar o ASSERT_VALID macro para teste sua validade interna (se suas classes substituem AssertValid).

Por exemplo, considere uma classe CMyData, que armazena um CObList em uma das suas variáveis de membro.The CObList variável, m_DataList, armazena uma coleção de CPerson objetos. Uma declaração abreviada de CMyData a seguinte aparência:

class CMyData : public CObject
{
    // Constructor and other members ...
    protected:
        CObList* m_pDataList;
    // Other declarations ...
    public:
#ifdef _DEBUG
        // Override:
        virtual void AssertValid( ) const;
#endif
    // And so on ...
};

The AssertValid Substituir em CMyData a seguinte aparência:

#ifdef _DEBUG
void CMyData::AssertValid( ) const
{
    // Call inherited AssertValid.
    CObject::AssertValid( );
    // Check validity of CMyData members.
    ASSERT_VALID( m_pDataList );
    // ...
}
#endif

CMyData usa o AssertValid mecanismo para testar a validade dos objetos armazenados no seu membro de dados. A substituição AssertValid de CMyData invoca a ASSERT_VALID macro para sua própria variável de membro m_pDataList.

Teste de validade não pára nesse nível porque a classe CObList substituições AssertValid muito. Essa substituir executa validade adicional teste no estado interno da lista.Assim, uma validade teste em um CMyData objeto leva a testes de validade adicionais para os estados internos do armazenado CObList objeto da lista.

Com alguns mais de trabalho, você poderia adicionar testes de validade para o CPerson objetos armazenados na lista também. Você pode derivar uma classe CPersonList de CObList e substituir AssertValid. A substituir, você chamaria CObject::AssertValid e, em seguida, percorrer a lista de telefonar AssertValid em cada CPerson objeto armazenado na lista. The CPerson classe mostrada no início deste tópico já substitui AssertValid.

Esse é um mecanismo eficiente quando você compilação para depuração.Quando você cria, em seguida, versão, o mecanismo é desativado automaticamente.

Limitações do AssertValid

Usuários de um AssertValid função de uma determinada classe deve perceber das limitações desta função. Uma declaração disparada indica que o objeto é definitivamente ruim e execução será interrompida.No entanto, a falta de asserção apenas indica que não foi encontrado nenhum problema, mas o objeto não é garantido em mercadoria condições.

Consulte também

Conceitos

Itens do MFC