Se sua classe possui destrutor, certamente vai precisar de:
* operador de atribuição
* Construtor de copia
O codigo abaixo:
Code:
AddList(const A &a)
{
// Qualquer operação
}
Não vai invocar o destrutor de a, mas o "Qualquer operação" pode causar isso, se você ali por algum motivo, deixar de usar a referência e atribuir a instância "a" a um dado concreto (não referência) criado localmente, o destrutor vai ser invocado, não do objeto passado como parâmetro, mas do definido localmente.
Eu acredito que a sua lista não pegue os valores por referência, então pode ser ai seu problema.
Como você não definiu operador de cópia, não definiu construtor de cópia, ambos vão referenciar o mesmo objeto (IDirect3dDevice), que no final vai ser destruído e os objetos "sobreviventes" vão referenciar o objeto destruído.
Você tem que criar o construtor de cópia e o operador de atribuição, seja para definnir como private e bloquear cópias, ou definir eles de forma correta a copiar o device.
T+