Criando um construtor de cópias fácil de manter

Considere a seguinte classe:

class A {

char *p;
int a, b, c, d;

public:
   A(const &A);
};

Note que eu tenho que definir um construtor de cópia para fazer uma cópia profunda de "p". Isso tem dois problemas:

A maioria dos campos deve ser simplesmente copiada. Copiá-los um por um é feio e propenso a erros.

Mais importante, sempre que um novo atributo é adicionado à classe, o construtor de cópias precisa ser atualizado, o que cria um pesadelo de manutenção.

Eu pessoalmente gostaria de fazer algo como:

A(const A &a) : A(a)
{
   // do deep copy of p
   :::
}

Portanto, o construtor de cópia padrão é chamado primeiro e, em seguida, a cópia profunda é executada.
Infelizmente, isso não parece funcionar.

Existe alguma maneira melhor de fazer isso? Uma restrição - não posso usar ponteiros compartilhados / inteligentes.

As sugestões da Sbi fazem muito sentido. Acho que vou criar classes de wrapper para manipular o recurso. Eu não quero usar o shared_ptr, pois as bibliotecas boost podem não estar disponíveis em todas as plataformas (pelo menos não nas distribuições padrão, o OpenSolaris é um exemplo).

Eu ainda acho que teria sido ótimo se você pudesse, de alguma forma, fazer o compilador criar os operadores de construtor / atribuição padrão para você e você poderia simplesmente adicionar sua funcionalidade sobre ele. O construtor de cópias / operador de atribuição criado manualmente funciona, acho que será um aborrecimento para criar e um pesadelo para manter. Portanto, minha regra pessoal seria evitar construtores de cópias personalizadas / operadores de atribuição a todo custo.

Obrigado a todos por suas respostas e informações úteis e desculpe pelos erros de digitação na minha pergunta. Eu estava digitando no meu telefone.

questionAnswers(9)

yourAnswerToTheQuestion